在学习了等差数列之后,老师给 Peter 布置了家庭作业:一张纸上写着一个 $R \times C$ 网格,其中一些格子中写有数字,而另一些格子是空的。Peter 的任务是通过填入缺失的数字来创建一个等差矩形。在等差矩形中,每一行和每一列中的所有数字按其出现的顺序都必须形成一个等差数列。
例如,以下是一个 $3 \times 5$ 的等差矩形:
1 3 5 7 9 2 2 2 2 2 3 1 -1 -3 -5
Peter 懒得手动完成这些任务。他希望你写一个程序来帮他。
给你一个整数网格,其中一些数字被点(.)代替。请判断是否可以用一些有理数替换这些点,从而得到一个等差矩形。如果存在解,请输出任意一组解。
注意:等差数列是指一个数字序列,其中任意两个相邻元素的差为常数。
输入格式
输入的第一行包含两个正整数 $R$ 和 $C$:网格的维度。
接下来的 $R$ 行,每行包含 $C$ 个由单个空格分隔的标记。每个标记要么是一个点(.),要么是一个整数。
输出格式
如果无解,输出单行字符串 No solution.。如果有多个解,选择并输出其中任意一个解。
输出解时,输出 $R$ 行,每行包含 $C$ 个以空格分隔的有理数。
每个有理数应打印为 N/D 的形式,其中 $D$ 为正整数,且 $N$ 和 $D$ 互质。如果 $D$ 为 1,则省略 /D 部分。
输出中的任何数字都不能超过 20 位(这个限制很容易满足,其唯一目的是为了简化对输出的检查)。
数据范围
网格中给出的每个数字都在 $-100$ 到 $100$ 之间(含边界)。
共有 10 个子任务,每个子任务分值为 10 分。在子任务 1 到 9 中,满足 $1 \le R, C \le 6$。各个子任务的具体性质如下:
- 子任务 1:所有数字都已填好。
- 子任务 2:每个测试数据中满足 $R = 1$ 或 $C = 1$。
- 子任务 3:每个测试数据中满足 $R = C = 2$。
- 子任务 4:每个测试数据都有唯一解,且可以通过第一个样例中提示的方法求得。
- 子任务 5:每个测试数据都有唯一解,且解中仅包含整数。
- 子任务 6:每个测试数据都有唯一解。
- 子任务 7:每个测试数据要么有唯一解且仅包含整数,要么无解。
- 子任务 8:每个测试数据要么有唯一解,要么无解。
- 子任务 9:无特殊限制。
- 子任务 10:无特殊限制,且满足 $1 \le R, C \le 50$。
样例
输入 1
3 5 . . 3 . 5 . . . 5 . . . . . 7
输出 1
1 2 3 4 5 2 3 4 5 6 3 4 5 6 7
说明 1
上述样例可以通过以下方式解决:首先,注意到最后一列的第二个数字必须是 6。然后填满第 1 行、第 2 行,最后填满第 1 到第 4 列。
输入 2
1 6 4 . . 0 . .
输出 2
4 8/3 4/3 0 -4/3 -8/3
输入 3
1 4 1 2 . 2
输出 3
No solution.
输入 4
3 3 1 . . . 2 . . . 3
输出 4
1 2 3 1 2 3 1 2 3
说明 4
这是该输入众多可能解中的一个。