package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
)
type Cell struct {
r, c int
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
buf := make([]byte, 0, 64*1024)
scanner.Buffer(buf, 1024*1024)
var t int
if scanner.Scan() {
t, _ = strconv.Atoi(scanner.Text())
}
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
for tc := 0; tc < t; tc++ {
scanner.Scan()
scanner.Scan()
m, _ := strconv.Atoi(scanner.Text())
cells := make([]Cell, m)
for i := 0; i < m; i++ {
scanner.Scan()
cells[i].r, _ = strconv.Atoi(scanner.Text())
scanner.Scan()
cells[i].c, _ = strconv.Atoi(scanner.Text())
}
sort.Slice(cells, func(i, j int) bool {
if cells[i].c != cells[j].c {
return cells[i].c < cells[j].c
}
return cells[i].r < cells[j].r
})
possible := true
has_pending := false
prev_c := 0
prev_r := 0
for i := 0; i < m; {
if i+1 < m && cells[i].c == cells[i+1].c {
if has_pending {
possible = false
break
}
i += 2
} else {
c := cells[i].c
r := cells[i].r
if has_pending {
diff_c := c - prev_c
expected_mod := 0
if r == prev_r {
expected_mod = 1
}
if diff_c%2 != expected_mod {
possible = false
break
}
has_pending = false
} else {
has_pending = true
prev_c = c
prev_r = r
}
i += 1
}
}
if has_pending {
possible = false
}
if possible {
fmt.Fprintln(out, "YES")
} else {
fmt.Fprintln(out, "NO")
}
}
}