For problem statement at 1000-1999/1100-1199/1100-1109/1101/problemD.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1100-1109/1101/verifierD.go ends with All tests passed can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
var n int
fmt.Fscan(in, &n)
a := make([]int, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(in, &a[i])
}
adj := make([][]int, n+1)
for i := 0; i < n-1; i++ {
var x, y int
fmt.Fscan(in, &x, &y)
adj[x] = append(adj[x], y)
adj[y] = append(adj[y], x)
}
const MAX = 200010
spf := make([]int, MAX)
for i := 0; i < MAX; i++ {
spf[i] = i
}
for i := 2; i*i < MAX; i++ {
if spf[i] == i {
for j := i*i; j < MAX; j += i {
if spf[j] == j {
spf[j] = i
}
}
}
}
nodesPerP := make(map[int][]int)
for i := 1; i <= n; i++ {
if a[i] > 1 {
primes := getPrimes(a[i], spf)
for _, p := range primes {
nodesPerP[p] = append(nodesPerP[p], i)
}
}
}
ans := 0
for _, nodes := range nodesPerP {
inSp := make([]bool, n+1)
for _, i := range nodes {
inSp[i] = true
}
visited := make([]bool, n+1)
maxForP := 0
for _, start := range nodes {
if visited[start] {
continue
}
u, _ := bfsFarthest(start, adj, inSp, visited, true)
_, dEdges := bfsFarthest(u, adj, inSp, visited, false)
compMax := dEdges + 1
if compMax > maxForP {
maxForP = compMax
}
}
if maxForP > ans {
ans = maxForP
}
}
fmt.Println(ans)
}
func getPrimes(x int, spf []int) []int {
res := []int{}
seen := make(map[int]bool)
cur := x
for cur > 1 {
p := spf[cur]
if !seen[p] {
res = append(res, p)
seen[p] = true
}
cur /= p
}
return res
}
func bfsFarthest(src int, adj [][]int, inSp []bool, vis []bool, markVis bool) (int, int) {
n := len(adj) - 1
dist := make([]int, n+1)
for i := 0; i <= n; i++ {
dist[i] = -1
}
dist[src] = 0
q := make([]int, 0)
q = append(q, src)
front := 0
farthest := src
maxD := 0
for front < len(q) {
u := q[front]
front++
if markVis {
vis[u] = true
}
if dist[u] > maxD {
maxD = dist[u]
farthest = u
}
for _, v := range adj[u] {
if inSp[v] && dist[v] == -1 {
dist[v] = dist[u] + 1
q = append(q, v)
}
}
}
return farthest, maxD
}
```