时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述

小苯有一个

行

列的

矩阵,其中有些格子是

,另一些为

。小苯希望从其中选择
恰好:两行(可以相同),或两列(可以相同),或一行和一列。将选择的行和列中的数字先后 "反转"。(即

变

,

变

。)

(
需要注意的是:如果同时选择了行和列,则交叉点处的点会 "反转" 两次,相当于没有 "反转"。)

现在他想知道,他是否可以把矩阵变成全

的,请你帮他确定一下吧。
输入描述:
每个测试文件均包含多组测试数据。第一行输入一个整数
代表数据组数,每组测试数据描述如下:
第一行两个整数
,表示矩阵的行数和列数。
接下来
行,每行一个长度为
的
串,描述题中所述的矩阵。

本题数据量较大,我们建议您选取较快的读入方式。
输出描述:
对于每组测试数据:
在单独的一行输出一个字符串,如果可以做到则输出 "YES",否则输出 "NO"。(都不含双引号。)
示例1
输入
复制
4
4 4
0000
1111
0000
1111
3 3
010
101
010
2 2
11
11
3 2
00
10
10
说明
对于第一组测试数据,可以选择 "反转" 第二行和第四行。
对于第二组测试数据,可以选择 "反转"第二行和第二列。