#CF2090B. 推球

推球

B. 推球
每个测试点时间限制:1 秒
内存限制:512 兆字节

Ecrade 有一个初始为空的 n×mn \times m 网格。他可以向网格中推入若干个(可能为零个)球。

每次操作,他可以选择从某一行的最左边缘从某一列的最上边缘推入一个球。

当一个球向某个位置移动时:

  • 如果该位置原本没有球,则新球会停在该位置。
  • 如果该位置原本已有球,则新球会停在该位置,而原来的球会继续沿相同方向移动到下一个位置。

注意:如果某一行或某一列已经放满(即该行或该列的所有格子都有球),则不能再向该行或该列推球。

给定网格的最终状态(每个格子是否有球),你需要判断 Ecrade 是否有可能通过一系列推球操作达到该最终状态。


输入格式

第一行包含一个整数 tt1t100001 \le t \le 10000),表示测试用例数量。每个测试用例的描述如下:

每个测试用例的第一行包含两个整数 nnmm1n,m501 \le n, m \le 50)。

接下来 nn 行,每行包含一个长度为 mm 的字符串,仅由 01 组成,描述网格的最终状态:若某位置为 1,则表示该位置有球。

保证所有测试用例的 nmn \cdot m 之和不超过 1000010000


输出格式

对于每个测试用例,如果 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)\begin{pmatrix}0&0&0\\0&0&0\\0&0&0\end{pmatrix}

执行 ROW 3(从第 3 行左边缘推球):

(002001000)\begin{pmatrix}0&0&2\\0&0&1\\0&0&0\end{pmatrix}

再执行 ROW 3

(002001004)\begin{pmatrix}0&0&2\\0&0&1\\0&0&4\end{pmatrix}

再执行 COL 3(从第 3 列上边缘推球):

(002001004)\begin{pmatrix}0&0&2\\0&0&1\\0&0&4\end{pmatrix}

再执行 COL 3

(002001430)\begin{pmatrix}0&0&2\\0&0&1\\4&3&0\end{pmatrix}

最终状态符合题意。


第二个测试用例的一种可能操作序列:

初始:

(000000000)\begin{pmatrix}0&0&0\\0&0&0\\0&0&0\end{pmatrix}

执行 ROW 2 三次:

(030020010)\begin{pmatrix}0&3&0\\0&2&0\\0&1&0\end{pmatrix}

执行 COL 2 两次:

(050040010)\begin{pmatrix}0&5&0\\0&4&0\\0&1&0\end{pmatrix}

最终状态符合题意。


第三个测试用例的一种可能操作序列:

初始:

(000000000)\begin{pmatrix}0&0&0\\0&0&0\\0&0&0\end{pmatrix}

执行 ROW 1ROW 2ROW 3

(123000000)\begin{pmatrix}1&2&3\\0&0&0\\0&0&0\end{pmatrix}

执行 COL 3 三次:

(123006005)\begin{pmatrix}1&2&3\\0&0&6\\0&0&5\end{pmatrix}

执行 ROW 1ROW 2ROW 3

(789123456)\begin{pmatrix}7&8&9\\1&2&3\\4&5&6\end{pmatrix}

最终状态符合题意。