For problem statement at 0-999/800-899/850-859/859/problemE.txt this is a correct solution, but verifier at 0-999/800-899/850-859/859/verifierE.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
scanner.Buffer(make([]byte, 1024*1024), 10*1024*1024)
scanInt := func() int {
scanner.Scan()
res, _ := strconv.Atoi(scanner.Text())
return res
}
if !scanner.Scan() {
return
}
N, _ := strconv.Atoi(scanner.Text())
parent := make([]int, 2*N+1)
size := make([]int, 2*N+1)
edges := make([]int, 2*N+1)
nextNode := make([]int, 2*N+1)
active := make([]bool, 2*N+1)
for i := 1; i <= 2*N; i++ {
parent[i] = i
size[i] = 1
}
var find func(int) int
find = func(i int) int {
if parent[i] == i {
return i
}
parent[i] = find(parent[i])
return parent[i]
}
for i := 0; i < N; i++ {
u := scanInt()
v := scanInt()
active[u] = true
active[v] = true
nextNode[u] = v
rootU := find(u)
rootV := find(v)
if rootU != rootV {
parent[rootU] = rootV
size[rootV] += size[rootU]
edges[rootV] += edges[rootU] + 1
} else {
edges[rootV]++
}
}
ans := int64(1)
MOD := int64(1000000007)
visited := make([]bool, 2*N+1)
for i := 1; i <= 2*N; i++ {
if active[i] && parent[i] == i {
V := int64(size[i])
E := edges[i]
if E == size[i]-1 {
ans = (ans * (V % MOD)) % MOD
} else if E == size[i] {
curr := i
for !visited[curr] {
visited[curr] = true
curr = nextNode[curr]
}
L := 1
temp := nextNode[curr]
for temp != curr {
L++
temp = nextNode[temp]
}
if L == 1 {
ans = (ans * 1) % MOD
} else {
ans = (ans * 2) % MOD
}
}
}
}
fmt.Println(ans)
}