// Slow solution for problem H // Author: Adam Polak #include #include #include using namespace std; struct Square { int v[6]; }; bool Loop(const Square& s, const Square& t) { for (int k = 0; k < 3; ++k) { if (s.v[k] == s.v[k + 3]) { if (!(t.v[k] < s.v[k] && t.v[k + 3] > s.v[k])) return false; int count = 0; for (int point = 0; point <= 1; ++point) { bool ok = true; for (int i = 0; i < 3; ++i) if (i != k) { if (t.v[i + 3 * point] <= s.v[i] || t.v[i + 3 * point] >= s.v[i + 3]) { ok = false; break; } } if (ok) count++; } return count == 1; } } } bool Clique(const vector& A, const vector& B) { for (int i = 0; i < A.size(); ++i) for (int j = 0; j < B.size(); ++j) if (!Loop(A[i], B[j])) return false; return true; } bool SingleTest() { int n; cin >> n; vector squares[3]; for (int i = 0; i < n; ++i) { Square s; for (int k = 0; k < 6; ++k) cin >> s.v[k]; for (int k = 0; k < 3; ++k) if (s.v[k] > s.v[k + 3]) swap(s.v[k], s.v[k + 3]); for (int k = 0; k < 3; ++k) if (s.v[k] == s.v[k + 3]) squares[k].push_back(s); } int empty = 0; for (int k = 0; k < 3; ++k) if (squares[k].empty()) empty++; int count = 0; for (int i = 0; i < 3; ++i) for (int j = i + 1; j < 3; ++j) if (Clique(squares[i], squares[j])) count++; return (empty == 0 && count >= 2) || (empty == 1 && count == 3); // } int main() { ios_base::sync_with_stdio(0); int Z; cin >> Z; while (Z--) { cout << (SingleTest() ? "YES" : "NO") << endl; } return 0; }