← Home
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)
	}
}
```