// Java solution for problem H // Author: Grzegorz Guspiel import java.io.*; import java.util.*; class IntReader { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tokenizer = new StringTokenizer(""); int next() throws IOException { while (!tokenizer.hasMoreTokens()) { tokenizer = new StringTokenizer(reader.readLine()); } return Integer.parseInt(tokenizer.nextToken()); } } public class h { final int INF = 1000100000; class Range { int a, b; Range(int a, int b) { this.a = a; this.b = b; } } Range rangeSumNeutral() { return new Range(INF, -INF); } Range rangeProductNeutral() { return new Range(-INF, INF); } void sum(Range r1, Range r2) { r1.a = Math.min(r1.a, r2.a); r1.b = Math.max(r1.b, r2.b); } void product(Range r1, Range r2) { r1.a = Math.max(r1.a, r2.a); r1.b = Math.min(r1.b, r2.b); } boolean contains(Range r1, Range r2) { String prefix = "contains " + r1 + " vs " + r2; if (r1.a <= r2.a && r1.b >= r2.b) { return true; } else { return false; } } boolean contains(Range r, int x) { return r.a <= x && x <= r.b; } class Frame { Range x, y, z; void rotate() { Range tmp = x; x = y; y = z; z = tmp; } @Override public String toString() { return "frame(" + x + ", " + y + ", " + z + ")"; } } boolean isPositionProperInThisRotation(ArrayList frames) { Range flatXSum = rangeSumNeutral(); Range flatYSum = rangeSumNeutral(); Range flatZSum = rangeSumNeutral(); Range flatXProduct = rangeProductNeutral(); Range flatYProduct = rangeProductNeutral(); boolean anyFlat = false; boolean anyHook = false; for (Frame frame : frames) if (frame.z.a == frame.z.b) { anyFlat = true; sum(flatXSum, frame.x); sum(flatYSum, frame.y); sum(flatZSum, frame.z); product(flatXProduct, frame.x); product(flatYProduct, frame.y); } for (Frame frame : frames) if (frame.z.a != frame.z.b) { anyHook = true; if (!contains(frame.z, flatZSum)) { return false; } if (frame.x.a == frame.x.b) { if (contains(flatXProduct, frame.x) && contains(flatYProduct, frame.y.a) && !contains(flatYSum, frame.y.b)) { continue; } else { } } else { if (contains(flatYProduct, frame.y) && contains(flatXProduct, frame.x.a) && !contains(flatXSum, frame.x.b)) { continue; } else { } } if (frame.x.a == frame.x.b) { if (contains(flatXProduct, frame.x) && contains(flatYProduct, frame.y.b) && !contains(flatYSum, frame.y.a)) { continue; } else { } } else { if (contains(flatYProduct, frame.y) && contains(flatXProduct, frame.x.b) && !contains(flatXSum, frame.x.a)) { continue; } else { } } return false; } return anyFlat && anyHook; } void rotate(ArrayList frames) { for (Frame frame : frames) { frame.rotate(); } } boolean isPositionProper(ArrayList frames) { for (int i = 0; i < 3; i++) { if (isPositionProperInThisRotation(frames)) { return true; } rotate(frames); } return false; } void solve() throws IOException { IntReader reader = new IntReader(); int z = reader.next(); for (int zz = 0; zz < z; zz++) { int n = reader.next(); ArrayList frames = new ArrayList(); for (int i = 0; i < n; i++) { int x1 = reader.next(); int y1 = reader.next(); int z1 = reader.next(); int x2 = reader.next(); int y2 = reader.next(); int z2 = reader.next(); if (x1 > x2) { int tmp = x1; x1 = x2; x2 = tmp; } if (y1 > y2) { int tmp = y1; y1 = y2; y2 = tmp; } if (z1 > z2) { int tmp = z1; z1 = z2; z2 = tmp; } Frame frame = new Frame(); frame.x = new Range(x1, x2); frame.y = new Range(y1, y2); frame.z = new Range(z1, z2); frames.add(frame); } if (isPositionProper(frames)) { System.out.println("YES"); } else { System.out.println("NO"); } } } public static void main(String[] args) throws IOException { new h().solve(); } } // class h