//起点 (1,n)
//方向: 1.下 2.左 3.上 4.右、
//什么时候不能走,需要换方向?
//能走:按当前方向走的下一个格子的数应该是初始值
#include<bits/stdc++.h>
using namespace std;
int a[25][25],n,x,y,s;
int main()
{
scanf("%d",&n);
x=1;
y=n;
a[x][y]=1;
s=2;
while(s<=n*n)//s表示当前该填入的数
{
while(x+1<=n && a[x+1][y]==0)
{
x++;
a[x][y]=s;
s++;
}
while(y-1>=1 && a[x][y-1]==0)
{
y--;
a[x][y]=s;
s++;
}
while(x-1>=1 && a[x-1][y]==0)
{
x--;
a[x][y]=s;
s++;
}
while(y+1<=n && a[x][y+1]==0)
{
y++;
a[x][y]=s;
s++;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}