#include <bits/stdc++.h>
using namespace std;
class Shredder
{
private:
int **matrix;
int n;
public:
Shredder(string bits)
{
int len=bits.length();
for(n=0;n*n<len;n=n+2);
cout<<"n:"<<n<<endl;
matrix=(int**)malloc(n*sizeof(int*));
for(int i=0;i<n;i++)
matrix[i]=(int*)malloc(n*sizeof(int));
int k=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(k<len)
{
if(bits[k]=='0')
matrix[i][j]=0;
else
matrix[i][j]=1;
}
else if(k==len)
matrix[i][j]=-1;
else
matrix[i][j]=0;
k++;
//matrix[i][j]=k+1;
//k++;
}
}
//horizontal_shred();
display();
//display();
//vertical_shred();
//display();
//rotate_about_leadingdiagonal();
//rotate_about_antidiagonal();
}
void rotate_about_leadingdiagonal()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<i;j++)
{
int temp=matrix[i][j];
matrix[i][j]=matrix[n-i-1][n-j-1];
matrix[n-i-1][n-j-1]=temp;
}
}
//display();
}
void rotate_about_antidiagonal()
{
for(int i=0;i<n;i++)
{
for(int j=n-1;i>n-j-1;j--)
{
int temp=matrix[i][j];
matrix[i][j]=matrix[n-i-1][n-j-1];
matrix[n-i-1][n-j-1]=temp;
}
}
//display();
}
void vertical_shred()
{
for(int i=0;i<n;i++)
{
int j=n-1;
int ti=0;
while(ti<j-1)
{
int mi=ti+1,nj=j-1,z;
while(mi<nj)
{
int temp=matrix[i][mi];
matrix[i][mi]=matrix[i][nj];
matrix[i][nj]=temp;
mi++;nj--;
}
mi=ti+1,nj=j-1;
z=(mi+nj)/2;
while(mi<z)
{
int temp=matrix[i][mi];
matrix[i][mi]=matrix[i][z];
matrix[i][z]=temp;
mi++;
z--;
}
z=(ti+nj+1)/2+1;
while(z<nj)
{
int temp=matrix[i][z];
matrix[i][z]=matrix[i][nj];
matrix[i][nj]=temp;
z++;
nj--;
}
ti++;
j--;
}
}
}
void horizontal_shred()
{
for(int i=0;i<n;i++)
{
int j=n-1;
int ti=0;
while(ti<j-1)
{
int mi=ti+1,nj=j-1,z;
while(mi<nj)
{
int temp=matrix[mi][i];
matrix[mi][i]=matrix[nj][i];
matrix[nj][i]=temp;
mi++;nj--;
}
mi=ti+1,nj=j-1;
z=(mi+nj)/2;
while(mi<z)
{
int temp=matrix[mi][i];
matrix[mi][i]=matrix[z][i];
matrix[z][i]=temp;
mi++;
z--;
}
z=(ti+nj+1)/2+1;
while(z<nj)
{
int temp=matrix[z][i];
matrix[z][i]=matrix[nj][i];
matrix[nj][i]=temp;
z++;
nj--;
}
ti++;
j--;
}
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
int temp=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=temp;
}
}
}
void display()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<matrix[i][j]<<" ";
}
cout<<endl;
}
}
};
int main() {
// your code goes here
Shredder s("01001");
//Shredder s("001100100");
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBTaHJlZGRlcgp7Cglwcml2YXRlOgoJaW50ICoqbWF0cml4OwoJaW50IG47CglwdWJsaWM6CglTaHJlZGRlcihzdHJpbmcgYml0cykKCXsKCQlpbnQgbGVuPWJpdHMubGVuZ3RoKCk7CgkJZm9yKG49MDtuKm48bGVuO249bisyKTsKCQljb3V0PDwibjoiPDxuPDxlbmRsOwoJCW1hdHJpeD0oaW50KiopbWFsbG9jKG4qc2l6ZW9mKGludCopKTsKCQlmb3IoaW50IGk9MDtpPG47aSsrKQoJCQltYXRyaXhbaV09KGludCopbWFsbG9jKG4qc2l6ZW9mKGludCkpOwoJCWludCBrPTA7CgkJZm9yKGludCBpPTA7aTxuO2krKykKCQl7CgkJCWZvcihpbnQgaj0wO2o8bjtqKyspCgkJCXsKCQkJCQoJCQkJaWYoazxsZW4pCgkJCQl7CgkJCQkJaWYoYml0c1trXT09JzAnKQoJCQkJCQltYXRyaXhbaV1bal09MDsKCQkJCQllbHNlCgkJCQkJCW1hdHJpeFtpXVtqXT0xOwoKCQkJCX0KCQkJCWVsc2UgaWYoaz09bGVuKQoJCQkJCW1hdHJpeFtpXVtqXT0tMTsKCQkJCWVsc2UKCQkJCQltYXRyaXhbaV1bal09MDsKCQkJCWsrKzsKCQkJCQoJCQkJLy9tYXRyaXhbaV1bal09aysxOwoJCQkJLy9rKys7CgkJCQkKCQkJCQkKCQkJfQoJCX0KCQkvL2hvcml6b250YWxfc2hyZWQoKTsKCQlkaXNwbGF5KCk7CgkJLy9kaXNwbGF5KCk7CgkJLy92ZXJ0aWNhbF9zaHJlZCgpOwoJCS8vZGlzcGxheSgpOwoJCS8vcm90YXRlX2Fib3V0X2xlYWRpbmdkaWFnb25hbCgpOwoJCS8vcm90YXRlX2Fib3V0X2FudGlkaWFnb25hbCgpOwoJfQoJdm9pZCByb3RhdGVfYWJvdXRfbGVhZGluZ2RpYWdvbmFsKCkKCXsKCQlmb3IoaW50IGk9MDtpPG47aSsrKQoJCXsKCQkJZm9yKGludCBqPTA7ajxpO2orKykKCQkJewoJCQkJaW50IHRlbXA9bWF0cml4W2ldW2pdOwoJCQkJbWF0cml4W2ldW2pdPW1hdHJpeFtuLWktMV1bbi1qLTFdOwoJCQkJbWF0cml4W24taS0xXVtuLWotMV09dGVtcDsKCQkJfQoJCX0KCQkvL2Rpc3BsYXkoKTsKCX0KCXZvaWQgcm90YXRlX2Fib3V0X2FudGlkaWFnb25hbCgpCgl7CgkJZm9yKGludCBpPTA7aTxuO2krKykKCQl7CgkJCWZvcihpbnQgaj1uLTE7aT5uLWotMTtqLS0pCgkJCXsKCQkJCWludCB0ZW1wPW1hdHJpeFtpXVtqXTsKCQkJCW1hdHJpeFtpXVtqXT1tYXRyaXhbbi1pLTFdW24tai0xXTsKCQkJCW1hdHJpeFtuLWktMV1bbi1qLTFdPXRlbXA7CgkJCX0KCQl9CgkJLy9kaXNwbGF5KCk7Cgl9Cgl2b2lkIHZlcnRpY2FsX3NocmVkKCkKCXsKCQlmb3IoaW50IGk9MDtpPG47aSsrKQoJCXsKCQkJaW50IGo9bi0xOwoJCQlpbnQgdGk9MDsKCQkJd2hpbGUodGk8ai0xKQoJCQl7CgkJCQlpbnQgbWk9dGkrMSxuaj1qLTEsejsKCQkJCXdoaWxlKG1pPG5qKQoJCQkJewoJCQkJCWludCB0ZW1wPW1hdHJpeFtpXVttaV07CgkJCQkJbWF0cml4W2ldW21pXT1tYXRyaXhbaV1bbmpdOwoJCQkJCW1hdHJpeFtpXVtual09dGVtcDsKCQkJCQltaSsrO25qLS07CgkJCQl9CgkJCQltaT10aSsxLG5qPWotMTsKCQkJCXo9KG1pK25qKS8yOwoJCQkJCgkJCQl3aGlsZShtaTx6KQoJCQkJewoJCQkJCWludCB0ZW1wPW1hdHJpeFtpXVttaV07CgkJCQkJbWF0cml4W2ldW21pXT1tYXRyaXhbaV1bel07CgkJCQkJbWF0cml4W2ldW3pdPXRlbXA7CgkJCQkJbWkrKzsKCQkJCQl6LS07CgkJCQl9CgkJCQl6PSh0aStuaisxKS8yKzE7CgkJCQl3aGlsZSh6PG5qKQoJCQkJewoJCQkJCWludCB0ZW1wPW1hdHJpeFtpXVt6XTsKCQkJCQltYXRyaXhbaV1bel09bWF0cml4W2ldW25qXTsKCQkJCQltYXRyaXhbaV1bbmpdPXRlbXA7CgkJCQkJeisrOwoJCQkJCW5qLS07CgkJCQl9CgkJCQl0aSsrOwoJCQkJai0tOwoJCQl9CgkJfQoJfQoJdm9pZCBob3Jpem9udGFsX3NocmVkKCkKCXsKCQlmb3IoaW50IGk9MDtpPG47aSsrKQoJCXsKCQkJaW50IGo9bi0xOwoJCQlpbnQgdGk9MDsKCQkJd2hpbGUodGk8ai0xKQoJCQl7CgkJCQlpbnQgbWk9dGkrMSxuaj1qLTEsejsKCQkJCXdoaWxlKG1pPG5qKQoJCQkJewoJCQkJCWludCB0ZW1wPW1hdHJpeFttaV1baV07CgkJCQkJbWF0cml4W21pXVtpXT1tYXRyaXhbbmpdW2ldOwoJCQkJCW1hdHJpeFtual1baV09dGVtcDsKCQkJCQltaSsrO25qLS07CgkJCQl9CgkJCQltaT10aSsxLG5qPWotMTsKCQkJCXo9KG1pK25qKS8yOwoJCQkJCgkJCQl3aGlsZShtaTx6KQoJCQkJewoJCQkJCWludCB0ZW1wPW1hdHJpeFttaV1baV07CgkJCQkJbWF0cml4W21pXVtpXT1tYXRyaXhbel1baV07CgkJCQkJbWF0cml4W3pdW2ldPXRlbXA7CgkJCQkJbWkrKzsKCQkJCQl6LS07CgkJCQl9CgkJCQl6PSh0aStuaisxKS8yKzE7CgkJCQl3aGlsZSh6PG5qKQoJCQkJewoJCQkJCWludCB0ZW1wPW1hdHJpeFt6XVtpXTsKCQkJCQltYXRyaXhbel1baV09bWF0cml4W25qXVtpXTsKCQkJCQltYXRyaXhbbmpdW2ldPXRlbXA7CgkJCQkJeisrOwoJCQkJCW5qLS07CgkJCQl9CgkJCQl0aSsrOwoJCQkJai0tOwoJCQl9CgkJfQoJCWZvcihpbnQgaT0wO2k8bjtpKyspCgkJewoJCQlmb3IoaW50IGo9aSsxO2o8bjtqKyspCgkJCXsKCQkJCWludCB0ZW1wPW1hdHJpeFtpXVtqXTsKCQkJCW1hdHJpeFtpXVtqXT1tYXRyaXhbal1baV07CgkJCQltYXRyaXhbal1baV09dGVtcDsKCQkJfQoJCX0KCX0KCXZvaWQgZGlzcGxheSgpCgl7CgkJZm9yKGludCBpPTA7aTxuO2krKykKCQl7CgkJCWZvcihpbnQgaj0wO2o8bjtqKyspCgkJCXsKCQkJCWNvdXQ8PG1hdHJpeFtpXVtqXTw8IiAiOwoJCQl9CgkJCWNvdXQ8PGVuZGw7CgkJfQoJfQp9OwoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglTaHJlZGRlciBzKCIwMTAwMSIpOwoJLy9TaHJlZGRlciBzKCIwMDExMDAxMDAiKTsKCXJldHVybiAwOwp9