//#include<stdio.h>
//
//int main()
//{
// int i, n, num, arr[100001]={0};
//
// scanf("%d", &n);
//
// for (i=0; i<n; i++)
// {
// scanf("%d", &num);
// arr[num] = 1;
// }
// scanf("%d", &n);
// for (i=0; i<n; i++)
// {
// scanf("%d", &num);
// printf("%d ", arr[num]);
// }
// return 0;
//}
//#include<stdio.h>
//
//int main() {
// int map[50][50] = {0};
// int i, j, k=1, n;
//
// scanf("%d", &n);
//
// for(i=0; i<n; i++) {
// for(j=0; j<n; j++) {
// map[i][j] = k++;
// }
// }
//
// for(i=0; i<n; i++) {
// for(j=0; j<n; j++) {
// printf("[%d %d]", i,j);
// }
// printf("\n");
// }
//}
/*
#include<stdio.h>
int main()
{
int i,j,k=1,n, map[50][50]= {0};
int arr[50]= {0};
scanf("%d", &n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
map[i][j] = k++;
}
}
for(i=0; i<n; i++) {
for(j=0; j<n; j++) {
printf("%d ", i+j+1);
}
printf("\n");
}
return 0;
}
*/
#include<stdio.h>
int main() {
int map[100][100]={0};
int i, j, n, k=1;
int x=1, y=1, p=0;
int direct[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
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) {
map[i][j]=1;
}
}
}
map[x][y]=k++;
for(i=0; i<n*n-1; i++) {
if(map[x+direct[p][0]][y+direct[p][1]]==0) {
x += direct[p][0];
y += direct[p][1];
map[x][y] = k++;
}
else {
p++;
p%=4;
i--;
}
}
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++) {
printf("%d ", map[i][j]);
}
printf("\n");
}
}