#include<bits/stdc++.h>;
#define pa pair<long long,long long>
#define fi first
#define ll long long
#define se second
using namespace std;
const long long M=998244853;
const int M7=1e7+9;
const int M6=1e6+9;
const int M5=1e5+9;
const int M8=1e8+9;
long long M1=166666668;
struct ds
{
long long fi,se,th;
};
long long n,n1,m1,j,k,k1,a[M6],c[201],c1[201],e[201],e1[201],b[201][201],m2,q,p,d,d1,d2,tam,l,l1,r1,r,t,i,y,x,z,t1,kq,kq1,kq2,dv,chx2,y2,so,d3,m;
string s,s1,s2,s3;
//map<long long,long long> m;
//double b[M6];
//pair<long long,long long> a[M6];
//pa b[M6];
//pa c[1000009];
//ds1 a[100009];
//vector<long long> a[100009];
vector<pa> v,v1;
//multiset<long long> sx;
//unordered_map<long long,long long> m;
deque<long long> dx,dx1;
//set<long long> sx;
//priority_queue<long long> dx;
bool sx1(pa x,pa y)
{
return x.fi<y.fi || (x.fi==y.fi && x.se<y.se);
}
bool sx(long long x,long long y)
{
return x>y;
}
long long scp(long long x)
{
return (double)sqrt(x)==(long long)sqrt(x);
}
void ql(long long i)
{
if(d2>0) return;
if(d==2*n)
{
for(long long i=1;i<=n;i++)
{
for(long long j=1;j<=n;j++) cout <<b[i][j]<<char(32);
cout <<'\n';
}
cout <<'\n';
d2++;
return;
}
if(i==v.size()) return;
if(d%2==0)
{
if(c[v[i].fi]==0 && c1[v[i].se]==0)
{
c[v[i].fi]=1;
c1[v[i].se]=1;
b[v[i].fi][v[i].se]=1;
d++;
ql(i+1);
d--;
c[v[i].fi]=0;
c1[v[i].se]=0;
b[v[i].fi][v[i].se]=0;
}
}
else
{
if(e[v[i].fi]==0 && e1[v[i].se]==0)
{
e[v[i].fi]=1;
e1[v[i].se]=1;
b[v[i].fi][v[i].se]=2;
d++;
ql(i+1);
d--;
e[v[i].fi]=0;
e1[v[i].se]=0;
b[v[i].fi][v[i].se]=0;
}
}
ql(i+1);
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//freopen("BAI05.inp","r",stdin);
// freopen("BAI05.out","w",stdout);
cin >>n;
x=1;
y=n;
d=d1=1;
while(v.size()<n*n)
{
for(long long i=x;i<=y;i++) v.push_back({x,i});
for(long long i=x+1;i<=y;i++) v.push_back({i,y});
for(long long i=y-1;i>=x;i--) v.push_back({y,i});
for(long long i=y-1;i>=x+1;i--) v.push_back({i,x});
x++;y--;
}
d=0;
ql(0);
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD47CiNkZWZpbmUgcGEgcGFpcjxsb25nIGxvbmcsbG9uZyBsb25nPgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgc2Ugc2Vjb25kCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGxvbmcgbG9uZyBNPTk5ODI0NDg1MzsKY29uc3QgaW50IE03PTFlNys5Owpjb25zdCBpbnQgTTY9MWU2Kzk7CmNvbnN0IGludCBNNT0xZTUrOTsKY29uc3QgaW50IE04PTFlOCs5Owpsb25nIGxvbmcgTTE9MTY2NjY2NjY4OwpzdHJ1Y3QgZHMKewogICAgbG9uZyBsb25nIGZpLHNlLHRoOwoKfTsKbG9uZyBsb25nIG4sbjEsbTEsaixrLGsxLGFbTTZdLGNbMjAxXSxjMVsyMDFdLGVbMjAxXSxlMVsyMDFdLGJbMjAxXVsyMDFdLG0yLHEscCxkLGQxLGQyLHRhbSxsLGwxLHIxLHIsdCxpLHkseCx6LHQxLGtxLGtxMSxrcTIsZHYsY2h4Mix5MixzbyxkMyxtOwpzdHJpbmcgcyxzMSxzMixzMzsKLy9tYXA8bG9uZyBsb25nLGxvbmcgbG9uZz4gbTsKLy9kb3VibGUgYltNNl07Ci8vcGFpcjxsb25nIGxvbmcsbG9uZyBsb25nPiAgYVtNNl07Ci8vcGEgYltNNl07Ci8vcGEgY1sxMDAwMDA5XTsKLy9kczEgYVsxMDAwMDldOwovL3ZlY3Rvcjxsb25nIGxvbmc+IGFbMTAwMDA5XTsKdmVjdG9yPHBhPiB2LHYxOwovL211bHRpc2V0PGxvbmcgbG9uZz4gc3g7Ci8vdW5vcmRlcmVkX21hcDxsb25nIGxvbmcsbG9uZyBsb25nPiBtOwpkZXF1ZTxsb25nIGxvbmc+IGR4LGR4MTsKLy9zZXQ8bG9uZyBsb25nPiBzeDsKLy9wcmlvcml0eV9xdWV1ZTxsb25nIGxvbmc+IGR4Owpib29sIHN4MShwYSB4LHBhIHkpCnsKICAgIHJldHVybiB4LmZpPHkuZmkgfHwgKHguZmk9PXkuZmkgJiYgeC5zZTx5LnNlKTsKfQpib29sIHN4KGxvbmcgbG9uZyB4LGxvbmcgbG9uZyB5KQp7CiAgICByZXR1cm4geD55Owp9CmxvbmcgbG9uZyBzY3AobG9uZyBsb25nIHgpCnsKICAgIHJldHVybiAoZG91YmxlKXNxcnQoeCk9PShsb25nIGxvbmcpc3FydCh4KTsKfQp2b2lkIHFsKGxvbmcgbG9uZyBpKQp7CiAgICBpZihkMj4wKSByZXR1cm47CiAgICBpZihkPT0yKm4pCiAgICB7CiAgICAgICAgZm9yKGxvbmcgbG9uZyBpPTE7aTw9bjtpKyspCiAgICAgICAgewogICAgICAgICAgICBmb3IobG9uZyBsb25nIGo9MTtqPD1uO2orKykgY291dCA8PGJbaV1bal08PGNoYXIoMzIpOwogICAgICAgICAgICBjb3V0IDw8J1xuJzsKICAgICAgICB9CiAgICAgICAgY291dCA8PCdcbic7CiAgICAgICAgZDIrKzsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZihpPT12LnNpemUoKSkgcmV0dXJuOwogICAgaWYoZCUyPT0wKQogICAgewogICAgICAgIGlmKGNbdltpXS5maV09PTAgJiYgYzFbdltpXS5zZV09PTApCiAgICAgICAgewogICAgICAgICAgICBjW3ZbaV0uZmldPTE7CiAgICAgICAgICAgIGMxW3ZbaV0uc2VdPTE7CiAgICAgICAgICAgIGJbdltpXS5maV1bdltpXS5zZV09MTsKICAgICAgICAgICAgZCsrOwogICAgICAgICAgICBxbChpKzEpOwogICAgICAgICAgICBkLS07CiAgICAgICAgICAgIGNbdltpXS5maV09MDsKICAgICAgICAgICAgYzFbdltpXS5zZV09MDsKICAgICAgICAgICAgYlt2W2ldLmZpXVt2W2ldLnNlXT0wOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBpZihlW3ZbaV0uZmldPT0wICYmIGUxW3ZbaV0uc2VdPT0wKQogICAgICAgIHsKICAgICAgICAgICAgZVt2W2ldLmZpXT0xOwogICAgICAgICAgICBlMVt2W2ldLnNlXT0xOwogICAgICAgICAgICBiW3ZbaV0uZmldW3ZbaV0uc2VdPTI7CiAgICAgICAgICAgIGQrKzsKICAgICAgICAgICAgcWwoaSsxKTsKICAgICAgICAgICAgZC0tOwogICAgICAgICAgICBlW3ZbaV0uZmldPTA7CiAgICAgICAgICAgIGUxW3ZbaV0uc2VdPTA7CiAgICAgICAgICAgIGJbdltpXS5maV1bdltpXS5zZV09MDsKICAgICAgICB9CiAgICB9CiAgICBxbChpKzEpOwp9CmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgIC8vZnJlb3BlbigiQkFJMDUuaW5wIiwiciIsc3RkaW4pOwogICAvLyBmcmVvcGVuKCJCQUkwNS5vdXQiLCJ3IixzdGRvdXQpOwogICAgY2luID4+bjsKICAgIHg9MTsKICAgIHk9bjsKICAgIGQ9ZDE9MTsKICAgIHdoaWxlKHYuc2l6ZSgpPG4qbikKICAgIHsKICAgICAgICBmb3IobG9uZyBsb25nIGk9eDtpPD15O2krKykgdi5wdXNoX2JhY2soe3gsaX0pOwogICAgICAgIGZvcihsb25nIGxvbmcgaT14KzE7aTw9eTtpKyspIHYucHVzaF9iYWNrKHtpLHl9KTsKICAgICAgICBmb3IobG9uZyBsb25nIGk9eS0xO2k+PXg7aS0tKSB2LnB1c2hfYmFjayh7eSxpfSk7CiAgICAgICAgZm9yKGxvbmcgbG9uZyBpPXktMTtpPj14KzE7aS0tKSB2LnB1c2hfYmFjayh7aSx4fSk7CiAgICAgICAgeCsrO3ktLTsKICAgIH0KICAgIGQ9MDsKICAgIHFsKDApOwp9Cg==