← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func solveSingle(p []int, n int, s int) []int {
	A := make([]int, n+1)
	A[0] = 0
	for i := 1; i <= n; i++ {
		A[i] = p[i-1]
	}
	T := make([]int, n+1)
	for i := 0; i <= n; i++ {
		T[i] = (i + s) % (n + 1)
	}

	ans := make([]int, 0)
	for {
		match := true
		for i := 0; i <= n; i++ {
			if A[i] != T[i] {
				match = false
				break
			}
		}
		if match {
			break
		}

		z := -1
		for i := 0; i <= n; i++ {
			if A[i] == 0 {
				z = i
				break
			}
		}

		var x int
		if T[z] == 0 {
			for i := 0; i <= n; i++ {
				if A[i] != T[i] {
					x = A[i]
					break
				}
			}
		} else {
			x = T[z]
		}

		y := -1
		for i := 0; i <= n; i++ {
			if A[i] == x {
				y = i
				break
			}
		}

		dist := (y - z) % (n + 1)
		if dist < 0 {
			dist += n + 1
		}
		ans = append(ans, dist)
		A[z], A[y] = A[y], A[z]
	}
	return ans
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var n, m int
	if _, err := fmt.Fscan(reader, &n, &m); err != nil {
		return
	}

	p := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &p[i])
	}

	q := make([]int, m)
	for i := 0; i < m; i++ {
		fmt.Fscan(reader, &q[i])
	}

	for s := 0; s <= 1; s++ {
		for r := 0; r <= 1; r++ {
			ansP := solveSingle(p, n, s)
			ansQ := solveSingle(q, m, r)

			if len(ansP)%2 == len(ansQ)%2 {
				for len(ansP) < len(ansQ) {
					ansP = append(ansP, 1, n)
				}
				for len(ansQ) < len(ansP) {
					ansQ = append(ansQ, 1, m)
				}

				fmt.Fprintln(writer, len(ansP))
				for i := 0; i < len(ansP); i++ {
					fmt.Fprintf(writer, "%d %d\n", ansP[i], ansQ[i])
				}
				return
			}
		}
	}

	fmt.Fprintln(writer, "-1")
}