For problem statement at 0-999/600-699/680-689/681/problemD.txt this is a correct solution, but verifier at 0-999/600-699/680-689/681/verifierD.go ends with case 3 failed: runtime error: exit status 2
panic: runtime error: index out of range [6] with length 6
goroutine 1 [running]:
main.main()
/tmp/build-3541908430/solution.go:34 +0x8d0
input:
5 4
1 2
1 3
1 4
2 5
3 4 6 3 0
exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n, m int
if _, err := fmt.Fscan(in, &n, &m); err != nil {
return
}
adj := make([][]int, n+1)
hasFather := make([]bool, n+1)
for i := 0; i < m; i++ {
var u, v int
fmt.Fscan(in, &u, &v)
adj[u] = append(adj[u], v)
hasFather[v] = true
}
a := make([]int, n+1)
inU := make([]bool, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(in, &a[i])
inU[a[i]] = true
}
depth := make([]int, n+1)
closest := make([]int, n+1)
var dfs func(int, int, int)
dfs = func(u, d, anc int) {
depth[u] = d
curr := anc
if inU[u] {
curr = u
}
closest[u] = curr
for _, v := range adj[u] {
dfs(v, d+1, curr)
}
}
for i := 1; i <= n; i++ {
if !hasFather[i] {
dfs(i, 0, -1)
}
}
for i := 1; i <= n; i++ {
if closest[i] != a[i] {
fmt.Fprintln(out, -1)
return
}
}
type Candidate struct {
id, d int
}
candidates := make([]Candidate, 0)
for i := 1; i <= n; i++ {
if inU[i] {
candidates = append(candidates, Candidate{i, depth[i]})
}
}
sort.Slice(candidates, func(i, j int) bool {
return candidates[i].d > candidates[j].d
})
fmt.Fprintln(out, len(candidates))
for _, c := range candidates {
fmt.Fprintln(out, c.id)
}
}
```