← Home
For problem statement at 2000-2999/2000-2099/2040-2049/2042/problemE.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2040-2049/2042/verifierE.go ends with All 5 tests passed. can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(reader, &n)

	value := make([]int, 2*n+1)
	count := make([]int, n+1)
	in_S := make([]bool, 2*n+1)

	for i := 1; i <= 2*n; i++ {
		fmt.Fscan(reader, &value[i])
		count[value[i]]++
		in_S[i] = true
	}

	adj := make([][]int, 2*n+1)
	for i := 0; i < 2*n-1; i++ {
		var u, v int
		fmt.Fscan(reader, &u, &v)
		adj[u] = append(adj[u], v)
		adj[v] = append(adj[v], u)
	}

	parent := make([]int, 2*n+1)
	val_vis := make([]int, n+1)
	val_vis_id := 0

	for i := 2 * n; i >= 1; i-- {
		if !in_S[i] {
			continue
		}

		var neighbors []int
		for _, v := range adj[i] {
			if in_S[v] {
				neighbors = append(neighbors, v)
			}
		}

		d := len(neighbors)
		if d == 0 {
			continue
		}
		if d == 1 {
			if count[value[i]] > 1 {
				in_S[i] = false
				count[value[i]]--
			}
			continue
		}

		queues := make([][]int, d)
		comp_nodes := make([][]int, d)
		finished := make([]bool, d)
		active := d

		for j, v := range neighbors {
			queues[j] = make([]int, 0, 4)
			queues[j] = append(queues[j], v)
			comp_nodes[j] = make([]int, 0, 4)
			comp_nodes[j] = append(comp_nodes[j], v)
			parent[v] = 0
		}

		for active > 1 {
			for j := 0; j < d; j++ {
				if finished[j] {
					continue
				}

				u := queues[j][0]
				queues[j] = queues[j][1:]

				for _, v := range adj[u] {
					if v == i || v == parent[u] {
						continue
					}
					if in_S[v] {
						parent[v] = u
						queues[j] = append(queues[j], v)
						comp_nodes[j] = append(comp_nodes[j], v)
					}
				}

				if len(queues[j]) == 0 {
					finished[j] = true
					active--
					if active <= 1 {
						break
					}
				}
			}
		}

		valid_comp := -1
		for j := 0; j < d; j++ {
			if finished[j] {
				unique := 0
				val_vis_id++
				for _, u := range comp_nodes[j] {
					val := value[u]
					if val_vis[val] != val_vis_id {
						val_vis[val] = val_vis_id
						unique++
					}
				}
				if unique == n {
					valid_comp = j
					break
				}
			}
		}

		if valid_comp != -1 {
			keep_neighbor := neighbors[valid_comp]
			q := []int{i}
			in_S[i] = false
			count[value[i]]--

			for len(q) > 0 {
				u := q[0]
				q = q[1:]
				for _, v := range adj[u] {
					if u == i && v == keep_neighbor {
						continue
					}
					if in_S[v] {
						in_S[v] = false
						count[value[v]]--
						q = append(q, v)
					}
				}
			}
		} else {
			var removed_nodes []int
			removed_nodes = append(removed_nodes, i)
			for j := 0; j < d; j++ {
				if finished[j] {
					removed_nodes = append(removed_nodes, comp_nodes[j]...)
				}
			}

			valid_c_star := true
			for _, u := range removed_nodes {
				val := value[u]
				count[val]--
				if count[val] == 0 {
					valid_c_star = false
				}
			}

			if valid_c_star {
				for _, u := range removed_nodes {
					in_S[u] = false
				}
			} else {
				for _, u := range removed_nodes {
					count[value[u]]++
				}
			}
		}
	}

	ans := make([]int, 0)
	for i := 1; i <= 2*n; i++ {
		if in_S[i] {
			ans = append(ans, i)
		}
	}
	fmt.Println(len(ans))
	for i, u := range ans {
		if i > 0 {
			fmt.Print(" ")
		}
		fmt.Print(u)
	}
	fmt.Println()
}
```