黑客帝国
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Neo 被困在了 Matrix(一个 n * n 的矩阵)中央,他知道如果想从矩阵中出来的话,必须沿着一定的规律走出矩阵,而这个规律就是旋螺线!

Neo 的初始方向为 '→',当他发现右手边的方格没有走过时,他会选择顺时针旋转 90°,然后走向那个没有走过的方格。

* 对于边长为奇数的矩阵,其矩阵中心为 (\frac{n + 1}{2}, \frac{n + 1}{2})
* 对于边长为偶数的矩阵,其矩阵中心为 (\frac{n}{2}, \frac{n}{2})

现在需要你输出每个方格被遍历到的顺序,从 0 开始计数。

输入描述:

每个测试文件均包含多组测试数据。第一行输入一个整数 T \left(1\leq T\leq 10^3\right) 代表数据组数,每组测试数据描述如下:

一行中给定一个整数 n (1 \leq n \leq 10^3),表示矩阵的边长。

数据保证 n 的总和不会超过 1000.

输出描述:

输出 n 行,每行包含 n 个数字,其中第 i 行第 j 个数字表示该方格被遍历到的顺序。
示例1

输入

复制
4
1
2
3
4

输出

复制
0
0 1
3 2
6 7 8
5 0 1
4 3 2
6 7 8 9
5 0 1 10
4 3 2 11
15 14 13 12

说明