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