矩阵生成
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 128 M,其他语言256 M
64bit IO Format: %lld

题目描述

小明一日突发奇想发明了一种全新的神奇MxM(保证M为奇数)矩阵,由整数1,2,3⋯⋯,M×M 填充生成,矩阵中各行数字之和、各列数字之和以及两条对角线上数字之和结果都完全相同。

生成矩阵前先将数字1放在第一行的中间位置。随后按照如下规则填写其余数字S(S=2,3⋯⋯,M×M):

1.若(S-1)在第一行但不在最后一列,则将S填在最后一行,(S-1)所在列的右一列;

2.若(S-1)在最后一列但不在第一行,则将S填在第一列,(S-1)所在行的上一行;

3.若(S-1)在第一行最后一列,则将S填在(S-1)的正下方;

4.若(S-1)既不在第一行,也不在最后一列,如果(S-1)的右上方还未填数,则将S填在(S-1)的右上方,否则将S填在(S-1)的正下方。

现提供M,请按上述方法生成M×M的矩阵。

输入描述:

一个整数M,即矩阵的大小。

输出描述:

共M行,每行M个整数,输出生成的MxM矩阵,同一行中相邻两个整数用空格隔开。

示例1

输入

复制
3

输出

复制
8 1 6
3 5 7
4 9 2

备注:

对于100%的数据,3≤M≤41,保证M为奇数。