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)
}
}