#include <iostream>
#include <vector>
using namespace std;
bool checkRectangles(vector<string>& grid, int n, int m) {
// Check horizontal and vertical pairs
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < m - 1; ++j) {
if (grid[i][j] != grid[i + 1][j] && grid[i][j] != grid[i][j + 1]) {
return false;
}
}
}
// Check extreme diagonals
char topLeft = grid[0][0];
char topRight = grid[0][m - 1];
char bottomLeft = grid[n - 1][0];
char bottomRight = grid[n - 1][m - 1];
if (topLeft == topRight && topLeft == bottomLeft && topLeft == bottomRight) {
return true;
}
return false;
}
int main() {
int t;
cin >> t;
while (t--) {
int n, m;
cin >> n >> m;
vector<string> grid(n);
for (int i = 0; i < n; ++i) {
cin >> grid[i];
}
bool possible = checkRectangles(grid, n, m);
if (possible) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBjaGVja1JlY3RhbmdsZXModmVjdG9yPHN0cmluZz4mIGdyaWQsIGludCBuLCBpbnQgbSkgewogICAgLy8gQ2hlY2sgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcGFpcnMKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbiAtIDE7ICsraSkgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbSAtIDE7ICsraikgewogICAgICAgICAgICBpZiAoZ3JpZFtpXVtqXSAhPSBncmlkW2kgKyAxXVtqXSAmJiBncmlkW2ldW2pdICE9IGdyaWRbaV1baiArIDFdKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAvLyBDaGVjayBleHRyZW1lIGRpYWdvbmFscwogICAgY2hhciB0b3BMZWZ0ID0gZ3JpZFswXVswXTsKICAgIGNoYXIgdG9wUmlnaHQgPSBncmlkWzBdW20gLSAxXTsKICAgIGNoYXIgYm90dG9tTGVmdCA9IGdyaWRbbiAtIDFdWzBdOwogICAgY2hhciBib3R0b21SaWdodCA9IGdyaWRbbiAtIDFdW20gLSAxXTsKICAgIGlmICh0b3BMZWZ0ID09IHRvcFJpZ2h0ICYmIHRvcExlZnQgPT0gYm90dG9tTGVmdCAmJiB0b3BMZWZ0ID09IGJvdHRvbVJpZ2h0KSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmludCBtYWluKCkgewogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKCiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgaW50IG4sIG07CiAgICAgICAgY2luID4+IG4gPj4gbTsKICAgICAgICB2ZWN0b3I8c3RyaW5nPiBncmlkKG4pOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgICAgIGNpbiA+PiBncmlkW2ldOwogICAgICAgIH0KCiAgICAgICAgYm9vbCBwb3NzaWJsZSA9IGNoZWNrUmVjdGFuZ2xlcyhncmlkLCBuLCBtKTsKCiAgICAgICAgaWYgKHBvc3NpYmxlKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIllFUyIgPDwgZW5kbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb3V0IDw8ICJOTyIgPDwgZW5kbDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K
OAoyIDEKVwpCCjYgNgpXV1dXQlcKV0JXV1dXCkJCQldXVwpCV1dXQkIKV1dCV0JCCkJCQldCVwoxIDEKVwoyIDIKQkIKQkIKMyA0CkJXQlcKV0JXQgpCV0JXCjQgMgpCQgpCQgpXVwpXVwo0IDQKV1dCVwpCQldCCldXQkIKQkJCQgoxIDUKV0JCV0IK
8
2 1
W
B
6 6
WWWWBW
WBWWWW
BBBWWW
BWWWBB
WWBWBB
BBBWBW
1 1
W
2 2
BB
BB
3 4
BWBW
WBWB
BWBW
4 2
BB
BB
WW
WW
4 4
WWBW
BBWB
WWBB
BBBB
1 5
WBBWB