← Home
```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")
		}
	}
}
```