Little Cyan Fish 是逻辑谜题的爱好者。今天,他正在玩一种经典谜题“Nurikabe”(ぬりかべ)的特殊版本。
该谜题在一个 $n \times m$ 的网格上进行。我们将第 $x$ 行第 $y$ 列的单元格记为 $(x, y)$,其中 $1 \le x \le n$ 且 $1 \le y \le m$。
目标是将一些(可能为零)单元格涂成黑色,其余单元格保持白色。黑色和白色单元格分别形成连通的区域,如果两个单元格共享一条边(水平或垂直,不包括对角线),则认为它们是连通的。形式上,两个相同颜色的单元格 $C_1(x_1, y_1)$ 和 $C_2(x_2, y_2)$ 被认为处于同一个区域,当且仅当满足以下至少一个条件:
- $|x_1 - x_2| + |y_1 - y_2| = 1$
- 存在另一个相同颜色的单元格 $C_3(x_3, y_3)$,使得 $C_1$ 和 $C_3$ 处于同一个区域,且 $C_2$ 和 $C_3$ 处于同一个区域。
图 4:$n=7$ 且 $m=7$ 的示例网格。
线索(Clues)是放置在特定单元格中的数字。带有线索的单元格不能被涂成黑色。
被涂黑的(黑色)单元格必须满足以下两个条件:
- (连通性):所有黑色单元格必须属于同一个黑色区域。
- (无 $2 \times 2$ 块):不存在任何 $2 \times 2$ 的单元格块完全为黑色。
未涂色的(白色)单元格必须满足以下两个条件:
- (每个区域一个线索):每个白色区域必须恰好包含一个线索。
- (大小限制):每个白色区域的面积(单元格数量)必须等于该区域内线索的数值。
例如,Little Cyan Fish 认为以下四种解法是不正确的,原因如下:
- 在第一个解法中,存在一个 $2 \times 2$ 的黑色单元格块。
- 在第二个解法中,存在多于一个的黑色区域。
- 在第三个解法中,左上角的白色区域包含多于一个线索。
- 在第四个解法中,左下角的白色区域不包含任何线索,且右下角的白色区域不满足面积要求。
图 5:给定谜题的错误解法
而以下解法是一个正确的解法。
图 6:给定谜题的正确解法
现在,给定一个恰好包含一个线索的 Nurikabe 谜题。你需要给出该谜题的一个解。
输入格式
输入包含多组测试数据。第一行包含一个整数 $T$ ($T \ge 1$),表示测试数据的组数。对于每组测试数据:
第一行包含两个整数 $n$ 和 $m$ ($n, m \ge 1$),表示网格的长和宽。
下一行包含三个整数 $i, j, x$ ($1 \le i \le n, 1 \le j \le m, 1 \le x \le n \cdot m$),表示唯一的线索位于单元格 $(i, j)$,数值为 $x$。
保证所有测试数据的 $n \cdot m$ 之和不超过 $10^6$。
输出格式
对于每组测试数据:
如果无法通过涂色满足所有要求,输出一行 “No”。
否则,第一行输出 “Yes”。
接下来的 $n$ 行描述你的解法。这 $n$ 行中的第 $i$ 行应包含恰好 $m$ 个字符,字符为 “.”(点)或 “#”(井号)。第 $j$ 个字符描述单元格 $(i, j)$ 的状态。
- 如果字符为 “.”,表示该单元格未涂色(白色)。
- 如果字符为 “#”,表示该单元格已涂色(黑色)。
样例
样例输入 1
4 3 3 2 2 1 5 5 2 2 1 4 6 1 1 20 2 5 2 5 10
样例输出 1
Yes ### #.# ### No Yes ...... ...... #..... ###... Yes ..... .....
说明
想在解决所有问题后寻找一些乐趣吗?它来了。
图 7:第 2 届 Universal Cup 谜题竞赛:Nurikabe(感谢 apiad 提供)