n = int(input())
matrix = [[0]*n for i in range(n)] #创建一个二维数组并初始化
num = 1 #num是向矩阵中填充的数字
#总共有n行 n列 所以从0开始 到n-1 结束
l = 0 #left 指的是矩阵中还未被填充的最左边的列
r = n-1 #right指的是矩阵中还未被填充的最右边的列
u = 0 #up指的是矩阵中还未被填充的顶行
d = n-1 #down 指的是矩阵中还未被填充的最下面的行
#随着回型矩阵的填充,上下左右未被填充的行都会发生变化, 需要注意
while(num <=n*n ):
for i in range(l,r+1):
matrix[u][i] = num #从左向右填充数据
num += 1
u = u + 1 #一行填充完了向下转一行 然后走列
for j in range(u,d+1):
matrix[j][r] = num #从上到下填充数据
num += 1
r = r - 1 #一列已经填充完了,之后将列数减一
for k in range(r,l-1,-1):
matrix[d][k] = num #从右到左填充数据
num+=1
d = d-1 #向上移动一行
for a in range(d,u-1,-1):
matrix[a][l] = num #从下到上填充数据
num+=1
l = l + 1
#二维矩阵填充wanbi
for p in range(n):
for o in range(n):
print(matrix[p][o],end=' ')
print('\r')