P0778

[中山市选2010]简单数谜

[中山市选2010]简单数谜

数谜(Kakuro)是一种与填字游戏类似的数字谜题。游戏需要在所有空格中填入 11 到 99 的数字,使每一栏中数字之和满足对应的提示,并且同一栏内不能出现重复数字。其中,“栏”是指水平方向或竖直方向上连续的一组空格,提示格不属于空格。

本题需要解决一种简化后的数谜。一个简单数谜由一个 (n+1)×(m+1)(n+1)\times(m+1) 的矩形构成:第一行给出各列的和,第一列给出各行的和,左上角的格子忽略不计,其余 n×mn\times m 个格子均需要填入数字。因此,每一行和每一列中的数字都不能重复,并且数字之和必须分别等于对应的行要求和列要求。

部分格子可能已经填入数字。你需要在保留这些数字的前提下完成整个数谜,并判断其解是否唯一。

输入格式

输入包含多组测试数据。

第一行包含一个正整数 TT,表示测试数据的组数。

对于每组测试数据:

  • 第一行包含两个整数 nn 和 mm,表示数谜内部区域的行数和列数;
  • 第二行包含 nn 个整数,依次表示各行的和;
  • 第三行包含 mm 个整数,依次表示各列的和;
  • 接下来 nn 行,每行包含 mm 个小于 1010 的非负整数,表示当前的填数情况。其中,00 表示该格尚未填入数字,其他数字表示已经填好的数字。

输出格式

对于每组测试数据:

  • 如果数谜恰好有一个解,输出这个解,共 nn 行,每行输出 mm 个数字;
  • 如果数谜有多个解,输出一行 Not unique.;
  • 如果数谜无解,输出一行 No answer.。

样例输入

3
3 3
6 6 6
6 6 6
0 0 0
0 3 0
0 0 0
2 3
10 17
5 16 6
2 0 0
0 9 0
2 2
3 5
4 4
0 0
0 0

样例输出

Not unique.
2 7 1
3 9 5
No answer.

数据范围

  • n<10n<10,m<10m<10;
  • 每个格子中输入的数均为小于 1010 的非负整数;
  • 每组测试数据中,尚未填入数字的格子不超过 1616 个。

来源与许可

本题为中山市选 20102010 试题「简单数谜」,题面与测试数据整理自 BZOJ 2469。

样例 1

输入

3
3 3
6 6 6
6 6 6
0 0 0
0 3 0
0 0 0
2 3
10 17
5 16 6
2 0 0
0 9 0
2 2
3 5
4 4
0 0
0 0

输出

Not unique.
2 7 1
3 9 5
No answer.