```go
package main
import (
"bufio"
"fmt"
"os"
)
func reverseString(s string) string {
n := len(s)
b := make([]byte, n)
for i := 0; i < n; i++ {
b[i] = s[n-1-i]
}
return string(b)
}
func isPalindrome(s string) bool {
n := len(s)
for i := 0; i < n/2; i++ {
if s[i] != s[n-1-i] {
return false
}
}
return true
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
var t int
scanner.Scan()
fmt.Sscanf(scanner.Text(), "%d", &t)
for tc := 0; tc < t; tc++ {
var n int
scanner.Scan()
fmt.Sscanf(scanner.Text(), "%d", &n)
s := make([]string, n)
found := false
for i := 0; i < n; i++ {
scanner.Scan()
s[i] = scanner.Text()
if !found && isPalindrome(s[i]) {
found = true
}
}
if found {
fmt.Println("YES")
continue
}
seen := make(map[string]bool)
for i := 0; i < n; i++ {
rev := reverseString(s[i])
if seen[rev] {
found = true
break
}
seen[s[i]] = true
}
if found {
fmt.Println("YES")
continue
}
seen = make(map[string]bool)
for i := 0; i < n; i++ {
if len(s[i]) == 2 {
seen[s[i]] = true
} else if len(s[i]) == 3 {
suffix := s[i][1:3]
revSuffix := reverseString(suffix)
if seen[revSuffix] {
found = true
break
}
}
}
if found {
fmt.Println("YES")
continue
}
seen = make(map[string]bool)
for i := n - 1; i >= 0; i-- {
if len(s[i]) == 2 {
seen[s[i]] = true
} else if len(s[i]) == 3 {
prefix := s[i][0:2]
revPrefix := reverseString(prefix)
if seen[revPrefix] {
found = true
break
}
}
}
if found {
fmt.Println("YES")
} else {
fmt.Println("NO")
}
}
}
```