← Home
```go
package main

import (
	"bufio"
	"os"
)

func readInt(scanner *bufio.Scanner) int {
	scanner.Scan()
	res := 0
	for _, b := range scanner.Bytes() {
		res = res*10 + int(b-'0')
	}
	return res
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	buf := make([]byte, 1024*1024)
	scanner.Buffer(buf, bufio.MaxScanTokenSize)

	if !scanner.Scan() {
		return
	}
	res := 0
	for _, b := range scanner.Bytes() {
		res = res*10 + int(b-'0')
	}
	t := res

	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	for tc := 0; tc < t; tc++ {
		n := readInt(scanner)

		a := make([]int, n)
		freq := make([]int, n+1)
		for i := 0; i < n; i++ {
			a[i] = readInt(scanner)
			freq[a[i]]++
		}

		b := make([]int, n)
		for i := 0; i < n; i++ {
			b[i] = readInt(scanner)
		}

		maxFreq := 0
		u := -1
		for i := 1; i <= n; i++ {
			if freq[i] > maxFreq {
				maxFreq = freq[i]
				u = i
			}
		}

		adj := make([][]int, n+1)
		for i := 0; i < n; i++ {
			u_edge := a[i]
			v_edge := b[i]
			adj[u_edge] = append(adj[u_edge], v_edge)
		}

		indegree := make([]int, n+1)
		for i := 1; i <= n; i++ {
			if i == u {
				continue
			}
			for _, neighbor := range adj[i] {
				if neighbor != u {
					indegree[neighbor]++
				}
			}
		}

		queue := make([]int, 0, n)
		for i := 1; i <= n; i++ {
			if i != u && indegree[i] == 0 {
				queue = append(queue, i)
			}
		}

		visitedCount := 0
		for len(queue) > 0 {
			curr := queue[0]
			queue = queue[1:]
			visitedCount++

			for _, neighbor := range adj[curr] {
				if neighbor != u {
					indegree[neighbor]--
					if indegree[neighbor] == 0 {
						queue = append(queue, neighbor)
					}
				}
			}
		}

		if visitedCount == n-1 {
			out.WriteString("AC\n")
		} else {
			out.WriteString("WA\n")
		}
	}
}
```