#include<stdio.h>
#include<stdlib.h>
int data[1600]={0};
int main()
{
int N,i=0,count=0,n;
scanf("%d",&N);
data[i*N+(N-1)/2]=1;
n=(N-1)/2;
count++;
while(count<N*N)
{
//若 (K-1) 在第一行但不在最后一列,则将 K 填在最后一行, (K-1) 所在列的右一列
if(i==0&&n!=N-1)
{
count++;
data[(N-1)*N+n+1]=count;
i=N-1;
n=n+1;
continue;
}
//若 (K-1)在最后一列但不在第一行,则将K填在第一列, (K-1)所在行的上一行
if(i!=0&&n==N-1)
{
count++;
data[(i-1)*N+0]=count;
i=i-1;
n=0;
continue;
}
//若 (K-1) 在第一行最后一列,则将 K 填在 (K-1) 的正下方
if(i==0&&(n==N-1))
{
count++;
data[(i+1)*N+n]=count;
i=i+1;
continue;
}
//若(K-1)既不在第一行,也不在最后一列,如果(K-1)的右上方还未填数,则将 K 填在(K−1) 的右上方,否则将K填在 (K-1)的正下方.
if(i!=0&&(n!=N-1))
{
count++;
if(data[(i-1)*N+n+1]==0)
{
data[(i-1)*N+n+1]=count;
i=i-1;
n=n+1;
continue;
}
else
{
data[(i+1)*N+n]=count;
i=i+1;
continue;
}
}
}
for(int j=0;j<N*N;j++)
{
printf("%d ",data[j]);
if((j+1)%N==0)
printf("\n");
}
return 1;
}