For problem statement at 1000-1999/1700-1799/1780-1789/1783/problemF.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1780-1789/1783/verifierF.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)
a := make([]int, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(reader, &a[i])
}
b := make([]int, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(reader, &b[i])
}
visA := make([]bool, n+1)
cycleA := make([]int, n+1)
idA := 0
for i := 1; i <= n; i++ {
if !visA[i] {
idA++
curr := i
for !visA[curr] {
visA[curr] = true
cycleA[curr] = idA
curr = a[curr]
}
}
}
visB := make([]bool, n+1)
cycleB := make([]int, n+1)
idB := 0
for i := 1; i <= n; i++ {
if !visB[i] {
idB++
curr := i
for !visB[curr] {
visB[curr] = true
cycleB[curr] = idB
curr = b[curr]
}
}
}
adj := make([][]int, idA+1)
for i := 1; i <= n; i++ {
u := cycleA[i]
adj[u] = append(adj[u], i)
}
match := make([]int, idB+1)
vis := make([]bool, idB+1)
var dfs func(u int) bool
dfs = func(u int) bool {
for _, i := range adj[u] {
v := cycleB[i]
if !vis[v] {
vis[v] = true
if match[v] == 0 || dfs(cycleA[match[v]]) {
match[v] = i
return true
}
}
}
return false
}
for u := 1; u <= idA; u++ {
for j := 1; j <= idB; j++ {
vis[j] = false
}
dfs(u)
}
inU := make([]bool, n+1)
for v := 1; v <= idB; v++ {
if match[v] != 0 {
inU[match[v]] = true
}
}
var ans []int
for i := 1; i <= n; i++ {
if !inU[i] {
ans = append(ans, i)
}
}
fmt.Println(len(ans))
for i, op := range ans {
if i > 0 {
fmt.Print(" ")
}
fmt.Print(op)
}
fmt.Println()
}