#define CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
#define ordered_set tree<pair<ll,ll>, null_type, less <pair<ll,ll>>, rb_tree_tag, tree_order_statistics_node_update>
#define ll long long
#define all(name) name.begin(),name.end()
#define rall(name) name.rbegin(),name.rend()
#define sz(s) (int)s.size()
const int N = 2e6 + 10, mod = 1e9 + 7;
const double PI = asin(1.0) * 2;
const int OO = 0x3f3f3f3f;
int dx[]{1, -1, 0, 0, 1, 1, -1, -1};
int dy[]{0, 0, 1, -1, 1, -1, 1, -1};
void fast() {
std::ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
map<string, bool> mp;
bool isWin(string s) {
return (
// row
(s[0] != '.' && s[0] == s[1] && s[0] == s[2]) ||
(s[3] != '.' && s[3] == s[4] && s[3] == s[5]) ||
(s[6] != '.' && s[6] == s[7] && s[6] == s[8]) ||
// col
(s[0] != '.' && s[0] == s[3] && s[0] == s[6]) ||
(s[1] != '.' && s[1] == s[4] && s[1] == s[7]) ||
(s[2] != '.' && s[2] == s[5] && s[2] == s[8]) ||
// diag
(s[0] != '.' && s[0] == s[4] && s[0] == s[8]) ||
(s[0] != '.' && s[2] == s[4] && s[2] == s[6])
);
}
string ans;
bool ck = 0;
void bfs(string s = ".........") {
ck = 0;
queue<pair<string, bool>> q; // grid, player( X --> 1, O --> 0)
q.push({s, 1});
while (!q.empty()) {
pair<string, bool> p = q.front();
q.pop();
string grid = p.first;
if (grid == ans) {
ck = 1;
break;
}
if (!isWin(grid)) {
for (int i = 0; i < 9; i++) {
if (grid[i] == '.') {
if (p.second) grid[i] = 'X'; else grid[i] = 'O';
if (grid[i] == ans[i])
q.push({grid, p.second ^ 1});
grid[i] = '.';
}
}
}
}
}
void solve() {
string s;
ans = "";
for (int i = 0; i < 3; i++) {
cin >> s;
ans += s;
}
bfs();
cout << (ck ? "yes" : "no") << "\n";
}
int main() {
fast();
//freopen("abc.in", "r", stdin);
//freopen("output.txt", "w", stdout);
int T = 1;
cin >> T;
while (T--) {
solve();
}
return 0;
}
I2RlZmluZSBDUlRfU0VDVVJFX05PX1dBUk5JTkdTCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KCnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiBsb25nIGRvdWJsZSBsZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwojZGVmaW5lIG9yZGVyZWRfc2V0IHRyZWU8cGFpcjxsbCxsbD4sIG51bGxfdHlwZSwgbGVzcyA8cGFpcjxsbCxsbD4+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGFsbChuYW1lKSAgbmFtZS5iZWdpbigpLG5hbWUuZW5kKCkKI2RlZmluZSByYWxsKG5hbWUpICBuYW1lLnJiZWdpbigpLG5hbWUucmVuZCgpCiNkZWZpbmUgc3oocykgKGludClzLnNpemUoKQpjb25zdCBpbnQgTiA9IDJlNiArIDEwLCBtb2QgPSAxZTkgKyA3Owpjb25zdCBkb3VibGUgUEkgPSBhc2luKDEuMCkgKiAyOwpjb25zdCBpbnQgT08gPSAweDNmM2YzZjNmOwppbnQgZHhbXXsxLCAtMSwgMCwgMCwgMSwgMSwgLTEsIC0xfTsKaW50IGR5W117MCwgMCwgMSwgLTEsIDEsIC0xLCAxLCAtMX07Cgp2b2lkIGZhc3QoKSB7CiAgICBzdGQ6Omlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7Cn0KCm1hcDxzdHJpbmcsIGJvb2w+IG1wOwoKYm9vbCBpc1dpbihzdHJpbmcgcykgewogICAgcmV0dXJuICgKICAgICAgICAgICAgLy8gcm93CiAgICAgICAgICAgIChzWzBdICE9ICcuJyAmJiBzWzBdID09IHNbMV0gJiYgc1swXSA9PSBzWzJdKSB8fAogICAgICAgICAgICAoc1szXSAhPSAnLicgJiYgc1szXSA9PSBzWzRdICYmIHNbM10gPT0gc1s1XSkgfHwKICAgICAgICAgICAgKHNbNl0gIT0gJy4nICYmIHNbNl0gPT0gc1s3XSAmJiBzWzZdID09IHNbOF0pIHx8CiAgICAgICAgICAgIC8vIGNvbAogICAgICAgICAgICAoc1swXSAhPSAnLicgJiYgc1swXSA9PSBzWzNdICYmIHNbMF0gPT0gc1s2XSkgfHwKICAgICAgICAgICAgKHNbMV0gIT0gJy4nICYmIHNbMV0gPT0gc1s0XSAmJiBzWzFdID09IHNbN10pIHx8CiAgICAgICAgICAgIChzWzJdICE9ICcuJyAmJiBzWzJdID09IHNbNV0gJiYgc1syXSA9PSBzWzhdKSB8fAogICAgICAgICAgICAvLyBkaWFnCiAgICAgICAgICAgIChzWzBdICE9ICcuJyAmJiBzWzBdID09IHNbNF0gJiYgc1swXSA9PSBzWzhdKSB8fAogICAgICAgICAgICAoc1swXSAhPSAnLicgJiYgc1syXSA9PSBzWzRdICYmIHNbMl0gPT0gc1s2XSkKICAgICk7Cn0KCnN0cmluZyBhbnM7CmJvb2wgY2sgPSAwOwoKdm9pZCBiZnMoc3RyaW5nIHMgPSAiLi4uLi4uLi4uIikgewogICAgY2sgPSAwOwogICAgcXVldWU8cGFpcjxzdHJpbmcsIGJvb2w+PiBxOyAvLyBncmlkLCBwbGF5ZXIoIFggLS0+IDEsIE8gLS0+IDApCiAgICBxLnB1c2goe3MsIDF9KTsKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgcGFpcjxzdHJpbmcsIGJvb2w+IHAgPSBxLmZyb250KCk7CiAgICAgICAgcS5wb3AoKTsKICAgICAgICBzdHJpbmcgZ3JpZCA9IHAuZmlyc3Q7CiAgICAgICAgaWYgKGdyaWQgPT0gYW5zKSB7CiAgICAgICAgICAgIGNrID0gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmICghaXNXaW4oZ3JpZCkpIHsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChncmlkW2ldID09ICcuJykgewogICAgICAgICAgICAgICAgICAgIGlmIChwLnNlY29uZCkgZ3JpZFtpXSA9ICdYJzsgZWxzZSBncmlkW2ldID0gJ08nOwogICAgICAgICAgICAgICAgICAgIGlmIChncmlkW2ldID09IGFuc1tpXSkKICAgICAgICAgICAgICAgICAgICAgICAgcS5wdXNoKHtncmlkLCBwLnNlY29uZCBeIDF9KTsKICAgICAgICAgICAgICAgICAgICBncmlkW2ldID0gJy4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHNvbHZlKCkgewogICAgc3RyaW5nIHM7CiAgICBhbnMgPSAiIjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgY2luID4+IHM7CiAgICAgICAgYW5zICs9IHM7CiAgICB9CiAgICBiZnMoKTsKICAgIGNvdXQgPDwgKGNrID8gInllcyIgOiAibm8iKSA8PCAiXG4iOwp9CgppbnQgbWFpbigpIHsKICAgIGZhc3QoKTsKICAgIC8vZnJlb3BlbigiYWJjLmluIiwgInIiLCBzdGRpbik7CiAgICAvL2ZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiAgICBpbnQgVCA9IDE7CiAgICBjaW4gPj4gVDsKICAgIHdoaWxlIChULS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=