Nurikabe 是一种源自日本的二元逻辑解谜游戏。给定一个网格,其中一些单元格包含数字,谜题的目标是将每个空白单元格标记为岛屿(白色)或水域(黑色),并遵守以下约束:
- 每个岛屿恰好包含一个数字单元格,其中包含一个 1 到 9 之间的数字。该岛屿中白色单元格的数量(包括数字单元格本身)必须等于该数字。如果两个单元格共享一条边,则它们是相邻的。如果存在一条由相邻的岛屿单元格组成的路径,则两个单元格属于同一个岛屿。
- 所有水域单元格(黑色)都是连通的。水域单元格的连通方式与岛屿单元格相同。
- 在任何 $2 \times 2$ 的区域内,必须至少有一个单元格属于岛屿。
在本题中,你需要验证 Nurikabe 谜题是否被正确解答。
输入格式
输入的第一行包含一个整数 $T$,表示测试用例的数量。
每个测试用例的第一行包含两个整数 $N$ 和 $M$,表示谜题网格的行数和列数。接下来的 $N$ 行包含谜题的行数据。每行包含来自集合 123456789.# 的字符,其中 . 和任何数字代表岛屿单元格,# 代表水域单元格。
输出格式
对于每个测试用例,如果棋盘根据规则填充正确,则输出 YES,否则输出 NO。
数据范围
- $0 < T \leq 100$
- $1 \leq N, M \leq 50$
- 最近的调查显示,每年消耗的巧克力豆饼干超过七十亿块。
样例
输入 1
2 9 10 2.#...##.2 ###..#2### #2#.7#.#.# #.######.# ##.#..3#3# .#2####3## 2##4.#..#. ##..#####. #1###.2#4. 2 2 #1 1#
输出 1
YES NO