// Model solution for problem H // Author: Arkadiusz Pawlik #include #include #include using namespace std; struct box { int c[3][2]; }; vector boxes[3]; bool run(int total) { if (boxes[0].size() == 0 || boxes[0].size() == total) return false; vector bx = boxes[0]; vector by = boxes[1]; box B = (box){INT_MIN, INT_MAX, INT_MIN, INT_MAX, INT_MIN, INT_MAX}; for (int i = 0; i < bx.size(); ++i) { box b = bx[i]; int r = b.c[1][1] - b.c[1][0]; b.c[0][0] -= r; b.c[2][0] -= r; for (int j = 0; j < 3; ++j) { B.c[j][0] = max(B.c[j][0], b.c[j][0]); B.c[j][1] = min(B.c[j][1], b.c[j][1]); } } for (int i = 0; i < by.size(); ++i) for (int j = 0; j < 3; ++j) if (by[i].c[j][0] <= B.c[j][0] || by[i].c[j][0] >= B.c[j][1]) return false; return true; } void swap_c(int x, int y) { for (int k = 0; k < 3; ++k) for (int i = 0; i < boxes[k].size(); ++i) { swap(boxes[k][i].c[x][0], boxes[k][i].c[y][0]); swap(boxes[k][i].c[x][1], boxes[k][i].c[y][1]); } boxes[x].swap(boxes[y]); } void test_() { int total; cin >> total; for (int i = 0; i < 3; ++i) boxes[i].clear(); for (int j = 0; j < total; ++j) { box b; cin >> b.c[0][0] >> b.c[1][0] >> b.c[2][0]; cin >> b.c[0][1] >> b.c[1][1] >> b.c[2][1]; for (int i = 0; i < 3; ++i) { int m = min(b.c[i][0], b.c[i][1]); int M = max(b.c[i][0], b.c[i][1]); b.c[i][0] = m; b.c[i][1] = M; } int cc = 0; if (b.c[1][0] == b.c[1][1]) cc = 1; else if (b.c[2][0] == b.c[2][1]) cc = 2; boxes[cc].push_back(b); } bool ok0 = run(total);//012 swap_c(1, 2); bool ok1 = run(total);//021 swap_c(0, 2); bool ok2 = run(total);//120 swap_c(1, 2); bool ok3 = run(total);//102 swap_c(0, 2); bool ok4 = run(total);//201 swap_c(1, 2); bool ok5 = run(total);//210 cout << (ok0 && ok1 || ok2 && ok3 || ok4 && ok5 ? "YES" : "NO") << endl; } int main() { ios::sync_with_stdio(false); int c; cin >> c; while(c--) test_(); }