万能矩阵
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld

题目描述

给定一个正整数 n,你需要构造一个 2n \times 2n 的整数矩阵 M,其元素 M_{i, j} 满足 0 \leq M_{i, j} \leq n^41 \le i, j \le 2n)。


构造的目标是使得区间 [1, n^4] 内的每一个整数 K 都可以表示为该矩阵 M 的某个连续子矩阵的所有元素之和。


一个连续子矩阵由其左上角坐标 (r_1, c_1) 和右下角坐标 (r_2, c_2) 确定,其中 1 \le r_1 \le r_2 \le 2n1 \le c_1 \le c_2 \le 2n


即,对于任意 K \in [1, n^4],存在 1 \le r_1 \le r_2 \le 2n1 \le c_1 \le c_2 \le 2n 使得:



K = \sum_{i=r_1}^{r_2} \sum_{j=c_1}^{c_2} M_{i, j}


如果存在任何满足条件的 2n \times 2n 的矩阵 M ,输出这个矩阵 M ,否则输出 “IMPOSSIBLE” 。

输入描述:

第一行输入一个整数 t1 \le t \le 50),表示测试用例数量。


每个测试用例包括一行一个正整数 n (1 \le n \le 100)


保证所有测试用例的 n^4 之和不超过 10^8

输出描述:

对每个测试用例,如果存在任意一个满足条件的矩阵 M ,输出 2n 行,每行 2n 个整数,以空格分隔。这些整数构成了你构造的 2n \times 2n 矩阵 M ,其元素 M_{i, j} 满足 0 \leq M_{i, j} \leq n^41 \le i, j \le 2n);否则输出“IMPOSSIBLE”。

示例1

输入

复制
2
1
2

输出

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