#CF2081F. 热矩阵

热矩阵

F. 热矩阵

题目描述

小周很喜欢矩阵,尤其是能让他感到兴奋的矩阵,我们称之为热矩阵

大小为 n×nn \times n 的热矩阵定义如下。用 ai,ja_{i,j} 表示矩阵第 ii 行第 jj 列的元素(1i,jn1 \le i,j \le n)。

  1. 矩阵的每一行、每一列都是 00n1n-1 的一个排列。
  2. 对于任意下标 i,ji,j1i,jn1 \le i,j \le n),满足ai,j+ai,nj+1=n1a_{i,j} + a_{i,n-j+1} = n-1
  3. 对于任意下标 i,ji,j1i,jn1 \le i,j \le n),满足ai,j+ani+1,j=n1a_{i,j} + a_{n-i+1,j} = n-1
  4. 所有有序对 (ai,j,ai,j+1)(a_{i,j}, a_{i,j+1})1in, 1j<n1 \le i \le n,\ 1 \le j < n)互不相同。
  5. 所有有序对 (ai,j,ai+1,j)(a_{i,j}, a_{i+1,j})1i<n, 1jn1 \le i < n,\ 1 \le j \le n)互不相同。

现在小周给你一个整数 nn,你需要判断是否存在对应的热矩阵:

  • 若存在,构造出任意一个满足条件的热矩阵;
  • 若不存在,告知他无法构造出热矩阵。

输入格式

每个测试包含多组数据。 第一行一个整数 tt1t10001 \le t \le 1000),表示测试用例数量。

每组测试用例占一行,包含一个整数 nn1n30001 \le n \le 3000)。

保证所有测试用例的 nn 之和不超过 30003000

输出格式

对于每组测试用例:

  • 若不存在大小为 n×nn \times n 的热矩阵,输出一行 NO(无引号)。
  • 若存在,先输出一行 YES(无引号),随后输出 nn 行,每行 nn 个整数,表示你构造的热矩阵。 若有多组合法解,输出任意一组即可。

样例输入

4
1
2
3
4

样例输出

YES
0
YES
0 1
1 0
NO
YES
0 1 2 3
1 3 0 2
2 0 3 1
3 2 1 0

样例说明

  • 1,2,41,2,4 组样例中给出的矩阵满足题目全部条件。
  • 33 组样例中,通过枚举所有可能矩阵可以证明:不存在满足所有条件的热矩阵。