一次操作本质上是把矩阵中的 1 个单位从一个格子移动到另一个格子,因此整个矩阵的元素总和始终不变。
反过来,只要目标矩阵 B 的所有元素都是非负整数,并且满足:
∑Bi,j=∑Ai,j给定一个 n × m 的正整数矩阵 A,其中第 i 行第 j 列的元素为 Ai,j。
你可以进行若干次操作。每次操作选择两个不同的格子 (x1, y1) 与 (x2, y2),执行:
Ax1, y1 ← Ax1, y1 − 1, Ax2, y2←Ax2, y2+1。
操作过程中矩阵元素必须始终为非负整数,且不允许出现负数。
你希望经过若干次操作后得到一个矩阵 B,使得它同时满足“上下对称”和“左右对称”,即:
对所有 1 ≤ i ≤ n,1 ≤ j ≤ m,都有 Bi,j = Bn+1−i, j。
对所有 1 ≤ i ≤ n,1 ≤ j ≤ m,都有 Bi,j = Bi, m+1−j。
请你输出任意一个满足条件的矩阵 B;如果不存在,输出 −1。
每个测试文件包含多组测试数据。第一行输入一个整数 T(1 ≤ T ≤ 105) 代表数据组数,每组测试数据描述如下:
第一行输入两个整数 n, m(1 ≤ n, m ≤ 2 × 105)。
接下来输入 n 行,每行输入 m 个整数,第 i 行第 j 列为 Aij (0≤Aij≤109),表示矩阵 A。
保证单个测试文件中所有测试数据的 n ⋅ m 之和不超过 5 × 105。
对于每组测试数据:
如果不存在满足条件的矩阵,输出一行 −1。
否则输出 n 行,每行输出 m 个非负整数,表示一个合法的矩阵 B。
输入
3
2 2
1 2
3 4
1 3
1 5 10
2 2
1 1
1 2
输出
-1
5 6 5
-1
说明
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.