#include<stdio.h>
int main()
{
int array[105][105]={};
int direct[4][2] = {{0, 1},{1, 0},{0, -1},{-1, 0}}; // (0, 1):L > R , (1, 0):U > D, (0,-1): R > L, (-1, 0): D > U
int x, y, p = 0;
int i, j, n, k=1;
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)
{
array[i][j] = 9; //겉테두리
}
}
}
x = 1;
y = 1;
array[x][y] = k++;
for(i=1 ; i<=n*n-1 ; i++) // 다음칸이 0인지 숫자인지 물어보기를 반복, n*n-1에서 -1을 하는 이유: 컴퓨터는 0에서 시작하는데 for문에서는 0이 아닌 1부터 시작했기때문
{
if(array[x + direct[p][0]][y + direct[p][1]] == 0) // 다음칸이 0이면 계속 진행 , (array[1 + direct[0][0]][1 + direct[0][1]] == 0)
{
x += direct[p][0]; // x가 1씩 증가할때 0,0씩 증가
y += direct[p][1]; // y가 1씩 증가할때 0,1씩 증가
array[x][y] = k++; // array배열이 k씩 증가
}
else // 0이 아닌 숫자일때 방향전환
{
i--;
p++;
p = p % 4;
}
}
for(i=1 ; i<=n ; i++)
{
for(j=1 ; j<=n ; j++)
{
printf("%d " , array[i][j]);
}
printf("\n");
}
return 0;
}