#include <bits/stdc++.h>
using namespace std;
int mat[1000][1000];
bool vis[1000][1000];
int n;
enum previous{left,right,bottom,top};
previous pr;
bool valid(int r,int c)
{
if(r>=0 && r<n && c>=0 && c<n)
return 1;
return 0;
}
//{-1,0,1,2} map {l,r,t,b}
void rec(int r,int c,int step,int anc)
{
if(!vis[r][c]){
mat[r][c]=step;
vis[r][c]=1;
}
if(valid(r,c+1) && !vis[r][c+1] && anc==0)// desno
{
if(!valid(r,c+2) || vis[r][c+2])
rec(r,c+1,++step,2);
else
rec(r,c+1,++step,0);
}
if(valid(r+1,c) && !vis[r+1][c] && anc==2)//dole
{
if(!valid(r+2,c) || vis[r+2][c])
rec(r+1,c,++step,-1);
else
rec(r+1,c,++step,2);
}
if(valid(r,c-1) && !vis[r][c-1] && anc==-1)//levo
{
if(!valid(r,c-2) || vis[r][c-2])
rec(r,c-1,++step,1);
else
rec(r,c-1,++step,-1);
}
if(valid(r-1,c) && !vis[r-1][c] && anc==1)//gore
{
if(!valid(r-2,c) || vis[r-2][c])
rec(r-1,c,++step,0);
else
rec(r-1,c,++step,1);
}
}
int main()
{
cin >> n;
memset(vis,false,sizeof vis);
rec(0,0,1,0);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<setw(3) <<mat[i][j] << " ";
cout <<endl;
}
}