#include <iostream>
#include <vector>
using namespace std;
bool checkOperations(vector<string>& grid, int n, int m) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
// Find pairs of squares with the same color
for (int x = i; x < n; ++x) {
for (int y = j; y < m; ++y) {
if (grid[i][j] == grid[x][y]) {
// Check if a rectangle can be formed to change the color of all squares in between
bool possible = true;
for (int p = i; p <= x && possible; ++p) {
for (int q = j; q <= y && possible; ++q) {
if (grid[p][q] != grid[i][j]) {
possible = false;
}
}
}
// If a rectangle can be formed, return true
if (possible) {
return true;
}
}
}
}
}
}
// If no suitable rectangles found, return false
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 = checkOperations(grid, n, m);
if (possible) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBjaGVja09wZXJhdGlvbnModmVjdG9yPHN0cmluZz4mIGdyaWQsIGludCBuLCBpbnQgbSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG07ICsraikgewogICAgICAgICAgICAvLyBGaW5kIHBhaXJzIG9mIHNxdWFyZXMgd2l0aCB0aGUgc2FtZSBjb2xvcgogICAgICAgICAgICBmb3IgKGludCB4ID0gaTsgeCA8IG47ICsreCkgewogICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IGo7IHkgPCBtOyArK3kpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZ3JpZFtpXVtqXSA9PSBncmlkW3hdW3ldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGEgcmVjdGFuZ2xlIGNhbiBiZSBmb3JtZWQgdG8gY2hhbmdlIHRoZSBjb2xvciBvZiBhbGwgc3F1YXJlcyBpbiBiZXR3ZWVuCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcG9zc2libGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBwID0gaTsgcCA8PSB4ICYmIHBvc3NpYmxlOyArK3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHEgPSBqOyBxIDw9IHkgJiYgcG9zc2libGU7ICsrcSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncmlkW3BdW3FdICE9IGdyaWRbaV1bal0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSByZWN0YW5nbGUgY2FuIGJlIGZvcm1lZCwgcmV0dXJuIHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIC8vIElmIG5vIHN1aXRhYmxlIHJlY3RhbmdsZXMgZm91bmQsIHJldHVybiBmYWxzZQogICAgcmV0dXJuIGZhbHNlOwp9CgppbnQgbWFpbigpIHsKICAgIGludCB0OwogICAgY2luID4+IHQ7CgogICAgd2hpbGUgKHQtLSkgewogICAgICAgIGludCBuLCBtOwogICAgICAgIGNpbiA+PiBuID4+IG07CiAgICAgICAgdmVjdG9yPHN0cmluZz4gZ3JpZChuKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICAgICBjaW4gPj4gZ3JpZFtpXTsKICAgICAgICB9CgogICAgICAgIGJvb2wgcG9zc2libGUgPSBjaGVja09wZXJhdGlvbnMoZ3JpZCwgbiwgbSk7CgogICAgICAgIGlmIChwb3NzaWJsZSkgewogICAgICAgICAgICBjb3V0IDw8ICJZRVMiIDw8IGVuZGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY291dCA8PCAiTk8iIDw8IGVuZGw7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9Cg==
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