For problem statement at 1000-1999/1100-1199/1170-1179/1172/problemD.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1170-1179/1172/verifierD.go ends with oracle runtime error: exec: "oracleD": executable file not found in $PATH
exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
fmt.Fscan(reader, &n)
r := make([]int, n+1)
c := make([]int, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(reader, &r[i])
}
for i := 1; i <= n; i++ {
fmt.Fscan(reader, &c[i])
}
type Swap struct {
u, v int
}
getSwaps := func(p []int) []Swap {
var swaps []Swap
visited := make([]bool, n+1)
for i := 1; i <= n; i++ {
if !visited[i] {
cycle := []int{}
curr := i
for !visited[curr] {
visited[curr] = true
cycle = append(cycle, curr)
curr = p[curr]
}
if len(cycle) > 1 {
for j := len(cycle) - 1; j >= 1; j-- {
swaps = append(swaps, Swap{cycle[0], cycle[j]})
}
}
}
}
return swaps
}
vSwaps := getSwaps(r)
hSwaps := getSwaps(c)
type Portal struct {
r1, c1, r2, c2 int
}
var portals []Portal
vCols := make([]int, len(vSwaps))
hRows := make([]int, len(hSwaps))
hasDoor := make([][]bool, n+1)
for i := 1; i <= n; i++ {
hasDoor[i] = make([]bool, n+1)
}
isValidV := func(swap Swap, col int) bool {
u, v := swap.u, swap.v
if u > v {
u, v = v, u
}
if hasDoor[u][col] || hasDoor[v][col] {
return false
}
for rIdx := u + 1; rIdx < v; rIdx++ {
if hasDoor[rIdx][col] {
return false
}
}
return true
}
isValidH := func(swap Swap, row int) bool {
x, y := swap.u, swap.v
if x > y {
x, y = y, x
}
if hasDoor[row][x] || hasDoor[row][y] {
return false
}
for cIdx := x + 1; cIdx < y; cIdx++ {
if hasDoor[row][cIdx] {
return false
}
}
return true
}
colPointer := 1
for i, swap := range vSwaps {
for colPointer <= n && !isValidV(swap, colPointer) {
colPointer++
}
if colPointer > n {
fmt.Println("-1")
return
}
vCols[i] = colPointer
hasDoor[swap.u][colPointer] = true
hasDoor[swap.v][colPointer] = true
portals = append(portals, Portal{swap.u, colPointer, swap.v, colPointer})
colPointer++
}
rowPointer := 1
for i, swap := range hSwaps {
for rowPointer <= n && !isValidH(swap, rowPointer) {
rowPointer++
}
if rowPointer > n {
fmt.Println("-1")
return
}
hRows[i] = rowPointer
hasDoor[rowPointer][swap.u] = true
hasDoor[rowPointer][swap.v] = true
portals = append(portals, Portal{rowPointer, swap.u, rowPointer, swap.v})
rowPointer++
}
fmt.Println(len(portals))
for _, p := range portals {
fmt.Printf("%d %d %d %d\n", p.r1, p.c1, p.r2, p.c2)
}
}
```