For problem statement at 0-999/700-799/760-769/766/problemD.txt this is a correct solution, but verifier at 0-999/700-799/760-769/766/verifierD.go ends with All tests passed can you fix the verifier? ```go
package main
import (
"bufio"
"os"
"strconv"
)
var parent []int
var parity []int
var size []int
func find(x int) (int, int) {
if parent[x] == x {
return x, 0
}
root, p := find(parent[x])
parity[x] ^= p
parent[x] = root
return root, parity[x]
}
func union(x, y, rel int) bool {
rootX, pX := find(x)
rootY, pY := find(y)
if rootX == rootY {
return (pX^pY) == rel
}
if size[rootX] < size[rootY] {
parent[rootX] = rootY
parity[rootX] = pX ^ pY ^ rel
size[rootY] += size[rootX]
} else {
parent[rootY] = rootX
parity[rootY] = pX ^ pY ^ rel
size[rootX] += size[rootY]
}
return true
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
readInt := func() int {
scanner.Scan()
v, _ := strconv.Atoi(scanner.Text())
return v
}
readWord := func() string {
scanner.Scan()
return scanner.Text()
}
n := readInt()
m := readInt()
q := readInt()
words := make(map[string]int)
for i := 0; i < n; i++ {
words[readWord()] = i
}
parent = make([]int, n)
parity = make([]int, n)
size = make([]int, n)
for i := 0; i < n; i++ {
parent[i] = i
size[i] = 1
}
writer := bufio.NewWriter(os.Stdout)
for i := 0; i < m; i++ {
t := readInt()
x := readWord()
y := readWord()
rel := t - 1
if union(words[x], words[y], rel) {
writer.WriteString("YES\n")
} else {
writer.WriteString("NO\n")
}
}
for i := 0; i < q; i++ {
x := readWord()
y := readWord()
u, v := words[x], words[y]
rootU, pU := find(u)
rootV, pV := find(v)
if rootU != rootV {
writer.WriteString("3\n")
} else if (pU ^ pV) == 0 {
writer.WriteString("1\n")
} else {
writer.WriteString("2\n")
}
}
writer.Flush()
}
```