F. 热矩阵
题目描述
小周很喜欢矩阵,尤其是能让他感到兴奋的矩阵,我们称之为热矩阵。
大小为 n×n 的热矩阵定义如下。用 ai,j 表示矩阵第 i 行第 j 列的元素(1≤i,j≤n)。
- 矩阵的每一行、每一列都是 0 到 n−1 的一个排列。
- 对于任意下标 i,j(1≤i,j≤n),满足ai,j+ai,n−j+1=n−1
- 对于任意下标 i,j(1≤i,j≤n),满足ai,j+an−i+1,j=n−1
- 所有有序对 (ai,j,ai,j+1)(1≤i≤n, 1≤j<n)互不相同。
- 所有有序对 (ai,j,ai+1,j)(1≤i<n, 1≤j≤n)互不相同。
现在小周给你一个整数 n,你需要判断是否存在对应的热矩阵:
- 若存在,构造出任意一个满足条件的热矩阵;
- 若不存在,告知他无法构造出热矩阵。
输入格式
每个测试包含多组数据。
第一行一个整数 t(1≤t≤1000),表示测试用例数量。
每组测试用例占一行,包含一个整数 n(1≤n≤3000)。
保证所有测试用例的 n 之和不超过 3000。
输出格式
对于每组测试用例:
- 若不存在大小为 n×n 的热矩阵,输出一行
NO(无引号)。
- 若存在,先输出一行
YES(无引号),随后输出 n 行,每行 n 个整数,表示你构造的热矩阵。
若有多组合法解,输出任意一组即可。
样例输入
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,4 组样例中给出的矩阵满足题目全部条件。
- 第 3 组样例中,通过枚举所有可能矩阵可以证明:不存在满足所有条件的热矩阵。