← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

type Point struct {
	x, y int64
}

func min(a, b int64) int64 {
	if a < b {
		return a
	}
	return b
}

func max(a, b int64) int64 {
	if a > b {
		return a
	}
	return b
}

func onSeg(P, V, A Point) bool {
	cross := (A.x-V.x)*(P.y-V.y) - (A.y-V.y)*(P.x-V.x)
	if cross != 0 {
		return false
	}
	if P.x < min(V.x, A.x) || P.x > max(V.x, A.x) {
		return false
	}
	if P.y < min(V.y, A.y) || P.y > max(V.y, A.y) {
		return false
	}
	return true
}

func checkProp(P, V, A Point) bool {
	vp2 := (P.x-V.x)*(P.x-V.x) + (P.y-V.y)*(P.y-V.y)
	va2 := (A.x-V.x)*(A.x-V.x) + (A.y-V.y)*(A.y-V.y)
	if 25*vp2 >= va2 && 25*vp2 <= 16*va2 {
		return true
	}
	return false
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var t int
	if _, err := fmt.Fscan(in, &t); err != nil {
		return
	}

	for tc := 0; tc < t; tc++ {
		segs := make([][2]Point, 3)
		for i := 0; i < 3; i++ {
			fmt.Fscan(in, &segs[i][0].x, &segs[i][0].y, &segs[i][1].x, &segs[i][1].y)
		}

		found := false
		for i := 0; i < 3 && !found; i++ {
			s3 := segs[i]
			s1 := segs[(i+1)%3]
			s2 := segs[(i+2)%3]

			for j := 0; j < 2 && !found; j++ {
				for k := 0; k < 2 && !found; k++ {
					V1 := s1[j]
					A := s1[1-j]
					V2 := s2[k]
					B := s2[1-k]

					if V1.x == V2.x && V1.y == V2.y {
						V := V1
						dx1, dy1 := A.x-V.x, A.y-V.y
						dx2, dy2 := B.x-V.x, B.y-V.y
						cross := dx1*dy2 - dy1*dx2
						dot := dx1*dx2 + dy1*dy2

						if cross != 0 && dot >= 0 {
							P := s3[0]
							Q := s3[1]

							valid := false
							if onSeg(P, V, A) && onSeg(Q, V, B) && checkProp(P, V, A) && checkProp(Q, V, B) {
								valid = true
							} else if onSeg(Q, V, A) && onSeg(P, V, B) && checkProp(Q, V, A) && checkProp(P, V, B) {
								valid = true
							}

							if valid {
								fmt.Fprintln(out, "YES")
								found = true
							}
						}
					}
				}
			}
		}
		if !found {
			fmt.Fprintln(out, "NO")
		}
	}
}