#include <stdio.h>
#define NMAX 201
long sol5[5][5]={
{0, 0, 0, 0, 1},
{1, 0, 0, 1, 0},
{1, 1, 0, 0, 0},
{1, 0, 1, 0, 0},
{0, 1, 1, 1, 0}
};
long sol6[6][6]={
{0, 0, 0, 0, 1, 1},
{1, 0, 0, 0, 0, 1},
{1, 1, 0, 0, 1, 0},
{1, 1, 1, 0, 0, 0},
{0, 1, 0, 1, 0, 0},
{0, 0, 1, 1, 1, 0}
};
long a[NMAX][NMAX];
int main (void) {
FILE * fi = fopen("oras.in","rt");
FILE * fo = fopen("oras.out","wt");
long n;
fscanf(fi,"%ld",&n);
if (n==3) {
fprintf(fo,"010\n001\n100\n");
} else if (n==4) {
fprintf(fo,"-1\n");
} else {
long solved;
if (n%2==0) {
//forma de baza 6
for (long i=0; i<6; i++) for (long j=0; j<6; j++) a[i][j]=sol6[i][j];
solved=6;
/* for (long i=0; i<6; i++) {
for (long j=0; j<6; j++)
fprintf(stderr,"%ld ",a[i][j]);
fprintf(stderr,"\n");
}; */
} else {
//forma de baza 5
for (long i=0; i<5; i++) for (long j=0; j<5; j++) a[i][j]=sol5[i][j];
solved=5;
/* for (long i=0; i<5; i++) {
for (long j=0; j<5; j++)
fprintf(stderr,"%ld ",a[i][j]);
fprintf(stderr,"\n");
}; */
}
while (solved<n) {
for (long i=0; i<solved; i++) {
a[i][solved]=1;
a[i][solved+1]=0;
};
for (long j=0; j<solved; j++) {
a[solved][j]=0;
a[solved+1][j]=1;
};
a[solved][solved]=0;
a[solved+1][solved+1]=0;
a[solved][solved+1]=1;
a[solved+1][solved]=0;
solved+=2;
};
}
for (long i=0; i<n; i++) {
for (long j=0; j<n; j++)
fprintf(fo,"%ld",a[i][j]);
fprintf(fo,"\n");
};
fclose(fi); fclose(fo);
return 0;
};