B. 推球
每个测试点时间限制:1 秒
内存限制:512 兆字节
Ecrade 有一个初始为空的 n×m 网格。他可以向网格中推入若干个(可能为零个)球。
每次操作,他可以选择从某一行的最左边缘或从某一列的最上边缘推入一个球。
当一个球向某个位置移动时:
- 如果该位置原本没有球,则新球会停在该位置。
- 如果该位置原本已有球,则新球会停在该位置,而原来的球会继续沿相同方向移动到下一个位置。
注意:如果某一行或某一列已经放满(即该行或该列的所有格子都有球),则不能再向该行或该列推球。
给定网格的最终状态(每个格子是否有球),你需要判断 Ecrade 是否有可能通过一系列推球操作达到该最终状态。
输入格式
第一行包含一个整数 t(1≤t≤10000),表示测试用例数量。每个测试用例的描述如下:
每个测试用例的第一行包含两个整数 n 和 m(1≤n,m≤50)。
接下来 n 行,每行包含一个长度为 m 的字符串,仅由 0 和 1 组成,描述网格的最终状态:若某位置为 1,则表示该位置有球。
保证所有测试用例的 n⋅m 之和不超过 10000。
输出格式
对于每个测试用例,如果 Ecrade 能通过推球达到该最终状态,则输出 "Yes",否则输出 "No"。大小写不敏感。
示例输入
5
3 3
001
001
110
3 3
010
111
010
3 3
111
111
111
3 3
000
000
000
3 3
000
000
001
示例输出
YES
YES
YES
YES
NO
提示
为了直观理解,下面矩阵中的非零数字表示该球是第几个被推入的。
第一个测试用例的一种可能操作序列:
初始状态:
000000000
执行 ROW 3(从第 3 行左边缘推球):
000000210
再执行 ROW 3:
000000214
再执行 COL 3(从第 3 列上边缘推球):
000000214
再执行 COL 3:
004003210
最终状态符合题意。
第二个测试用例的一种可能操作序列:
初始:
000000000
执行 ROW 2 三次:
000321000
执行 COL 2 两次:
000541000
最终状态符合题意。
第三个测试用例的一种可能操作序列:
初始:
000000000
执行 ROW 1、ROW 2、ROW 3:
100200300
执行 COL 3 三次:
100200365
执行 ROW 1、ROW 2、ROW 3:
714825936
最终状态符合题意。