#include<iostream>
#include<iomanip>
#include<cstring>
using namespace std;
int main()
{
int n;
cin>>n;
int **array=new int *[n];//二维数组动态定义,一维数组则是int *array=new int [n]
for(int i=0;i<n;i++)
{
array[i]=new int [n];//按行分配空间
memset(array[i],0,n*sizeof(array[i]));//二维数组元素全部初始化为0,一维数组则是memset(a,0,sizeof(a))
}
int x,y,total;
x=y=0;
total=array[0][0]=1;
while(total<n*n)
{
while(y+1<n&&!array[x][y+1])//向右
array[x][++y]=++total;
while(x+1<n&&!array[x+1][y])//向下
array[++x][y]=++total;
while(y-1>=0&&!array[x][y-1])//向左
array[x][--y]=++total;
while(x-1>=0&&!array[x-1][y])//向上
array[--x][y]=++total;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<setw(5)<<array[i][j];//setw(5)意:域宽为5,即输出元素不足5位,在其前补空
cout<<endl;
}
for(int i=0;i<n;i++)
delete[] array[i];//按行释放空间
delete[] array;
}