/*
#include<stdio.h>
int main() {
int map[100][100] = {0};
int i, j, x, y, n, k;
scanf("%d", &n);
x = 0;
y = n/2;
k = 1;
map[x][y] = k++;
if(n==1)
{printf("1");
return 0;}
for(i=1; ; i++)
{
x--;
y++;
if(x<0) x=n-1;
if(y>=n) y=0;
map[x][y] = k++;
if((k-1)%n==0)
{
x+=2;
y-=1;
}
if(k>n*n) break;
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("%d ",map[i][j]);
}
printf("\n");
}
return 0;
}
*/
/*
#include <stdio.h>
int main()
{
int i,j,n,x,y;
int h[101][101]={0};
scanf("%d %d %d",&n,&x,&y);
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
h[x+i][y+j]=i+j+1;
h[x-i][y-j]=i+j+1;
h[x+i][y-j]=i+j+1;
h[x-i][y+j]=i+j+1;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%d ",h[i][j]);
}
printf("\n");
}
return 0;
}
*/
/*
#include<stdio.h>
int main() {
int n, x, y, i, j;
scanf("%d %d %d", &n, &x, &y);
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++) {
printf("%d ", ((x-i)>0?(x-i):(i-x))+((y-j)>0?(y-j):(j-y))+1);
}
printf("\n");
}
}
*/
/*
#include <stdio.h>
int main()
{
int m,n,x,y,i,j,t=0,tmp=0,b,c;
int a[201][201]= {0};
scanf("%d %d %d %d",&m,&n,&x,&y);
for(i=20; i<n+20; i++)
{
for(j=20; j<m+20; j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=20; i<n+20; i++)
{
for(j=20; j<m+20; j++)
{
t=0;
for(c=0; c<x; c++)
{
for(b=0; b<y; b++)
{
t+=a[i+b][j+c];
}
}
if(tmp<t) tmp=t;
}
}
printf("%d",tmp);
return 0;
}
*/
#include <stdio.h>
int main()
{
int n,i,j,k=1,t;
int a[51][51]={0};
int direct[4][2] = {{0,1},{1,0},{0,-1}, {-1, 0}};
int x, y;
scanf("%d",&n);
for(i=0;i<=n+1; i++) {
for(j=0; j<=n+1; j++) {
if(i==0 || j==0 || i==n+1|| j==n+1){
a[i][j]=1;
}
}
}
t=0;
x=1;
y=1;
k=1;
a[x][y]=k++;
for(i=0; i<n*n-1;) {
if(a[x+direct[t][0]][y+direct[t][1]]==0) {
x += direct[t][0];
y += direct[t][1];
a[x][y]=k++;
i++;
}
else {
t++;
t%=4;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}