← 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 case 1 failed: col 1: expected exit col 2, got 1
input:
6
3 2 1 6 5 4
2 5 3 4 6 1

output:
5
1 1 3 1
4 1 6 1
5 1 5 2
4 2 4 5
3 5 3 6
exit status 1 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)

	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 portal struct {
		x1, y1, x2, y2 int
	}

	var portals []portal
	used := make([][]bool, n+1)
	for i := 0; i <= n; i++ {
		used[i] = make([]bool, n+1)
	}

	rowCurrent := make([]int, n+1)
	for i := 1; i <= n; i++ {
		rowCurrent[i] = i
	}
	
	colIdx := 1
	for i := 1; i <= n; i++ {
		if rowCurrent[i] != r[i] {
			target := r[i]
			var j int
			for k := i + 1; k <= n; k++ {
				if rowCurrent[k] == target {
					j = k
					break
				}
			}
			for colIdx <= n && (used[i][colIdx] || used[j][colIdx]) {
				colIdx++
			}
			if colIdx <= n {
				portals = append(portals, portal{i, colIdx, j, colIdx})
				used[i][colIdx] = true
				used[j][colIdx] = true
				rowCurrent[i], rowCurrent[j] = rowCurrent[j], rowCurrent[i]
			}
		}
	}

	colCurrent := make([]int, n+1)
	for i := 1; i <= n; i++ {
		colCurrent[i] = i
	}

	rowIdx := n
	for i := 1; i <= n; i++ {
		if colCurrent[i] != c[i] {
			target := c[i]
			var j int
			for k := i + 1; k <= n; k++ {
				if colCurrent[k] == target {
					j = k
					break
				}
			}
			for rowIdx >= 1 && (used[rowIdx][i] || used[rowIdx][j]) {
				rowIdx--
			}
			if rowIdx >= 1 {
				portals = append(portals, portal{rowIdx, i, rowIdx, j})
				used[rowIdx][i] = true
				used[rowIdx][j] = true
				colCurrent[i], colCurrent[j] = colCurrent[j], colCurrent[i]
			}
		}
	}

	for i := 1; i <= n; i++ {
		if rowCurrent[i] != r[i] || colCurrent[i] != c[i] {
			fmt.Println("-1")
			return
		}
	}

	fmt.Println(len(portals))
	for _, p := range portals {
		fmt.Printf("%d %d %d %d\n", p.x1, p.y1, p.x2, p.y2)
	}
}