#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int layer=0,i=0,j=0,a[50][50],direct=0,n;
memset(a,0,sizeof(a));
cin>>n;
for(int k=1;k<=n*n;)
{
switch(direct)
{
case 0:
if(j==n-layer-1)
{
a[i][j]=k++;
direct=1;
i++;
break;
}else
{
a[i][j]=k++;
j++;
break;
}
case 1:
if(i==n-layer-1)
{
a[i][j]=k++;
direct=2;
j--;
break;
}else
{
a[i][j]=k++;
i++;
break;
}
case 2:
if(j==layer)
{
a[i][j]=k++;
direct=3;
i--;
layer++;
break;
}else
{
a[i][j]=k++;
j--;
break;
}
case 3:
if(i==layer)
{
a[i][j]=k++;
direct=0;
j++;
break;
}else
{
a[i][j]=k++;
i--;
break;
}
}
}
for(int p=0;p<n;p++)
{
for(int q=0;q<n;q++)
cout<<setw(5)<<a[p][q];
cout<<endl;
}
return 0;
}