For problem statement at 0-999/700-799/760-769/765/problemE.txt this is a correct solution, but verifier at 0-999/700-799/760-769/765/verifierE.go ends with All tests passed! can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
fmt.Fscan(reader, &n)
adj := make([][]int, n+1)
for i := 0; i < n-1; i++ {
var u, v int
fmt.Fscan(reader, &u, &v)
adj[u] = append(adj[u], v)
adj[v] = append(adj[v], u)
}
if n == 2 {
fmt.Println(1)
return
}
up := make([]int, n+1)
down := make([]int, n+1)
parent := make([]int, n+1)
freq := make([]int, n+2)
keys := make([]int, 0, n+2)
var dfs1 func(int, int)
dfs1 = func(u, p int) {
parent[u] = p
for _, v := range adj[u] {
if v != p {
dfs1(v, u)
}
}
c_minus1 := 0
start := len(keys)
for _, v := range adj[u] {
if v != p {
x := up[v]
if x == -1 {
c_minus1++
} else {
if freq[x] == 0 {
keys = append(keys, x)
}
freq[x]++
}
}
}
unique_len := len(keys) - start
if c_minus1 > 0 {
up[u] = -1
} else if unique_len > 1 {
up[u] = -1
} else if unique_len == 1 {
up[u] = keys[start] + 1
} else {
up[u] = 1
}
for _, k := range keys[start:] {
freq[k] = 0
}
keys = keys[:start]
}
dfs1(1, 0)
var dfs2 func(int, int)
dfs2 = func(u, p int) {
c_minus1 := 0
start := len(keys)
add := func(x int) {
if x == -1 {
c_minus1++
} else {
if freq[x] == 0 {
keys = append(keys, x)
}
freq[x]++
}
}
if p != 0 {
add(down[u])
}
for _, v := range adj[u] {
if v != p {
add(up[v])
}
}
for _, v := range adj[u] {
if v == p {
continue
}
y := up[v]
rem_minus1 := c_minus1
if y == -1 {
rem_minus1--
}
if rem_minus1 > 0 {
down[v] = -1
continue
}
rem_unique := len(keys) - start
if y != -1 && freq[y] == 1 {
rem_unique--
}
if rem_unique > 1 {
down[v] = -1
} else if rem_unique == 1 {
rem_val := keys[start]
if rem_val == y && freq[y] == 1 {
rem_val = keys[start+1]
}
down[v] = rem_val + 1
} else {
down[v] = 1
}
}
for _, k := range keys[start:] {
freq[k] = 0
}
keys = keys[:start]
for _, v := range adj[u] {
if v != p {
dfs2(v, u)
}
}
}
dfs2(1, 0)
min_ans := int(1e9)
for i := 1; i <= n; i++ {
c_minus1 := 0
start := len(keys)
add := func(x int) {
if x == -1 {
c_minus1++
} else {
if freq[x] == 0 {
keys = append(keys, x)
}
freq[x]++
}
}
if i != 1 {
add(down[i])
}
for _, v := range adj[i] {
if v != parent[i] {
add(up[v])
}
}
unique_len := len(keys) - start
if c_minus1 == 0 && unique_len <= 2 {
L_sum := 0
for _, val := range keys[start:] {
L_sum += val
}
ans := L_sum
for ans%2 == 0 {
ans /= 2
}
if ans < min_ans {
min_ans = ans
}
}
for _, k := range keys[start:] {
freq[k] = 0
}
keys = keys[:start]
}
if min_ans == int(1e9) {
fmt.Println(-1)
} else {
fmt.Println(min_ans)
}
}