← Home
package main

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

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

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

	readGraph := func() [][]bool {
		adj := make([][]bool, n+1)
		for i := 0; i <= n; i++ {
			adj[i] = make([]bool, n+1)
		}
		for i := 1; i <= n; i++ {
			next := i + 1
			if next > n {
				next = 1
			}
			adj[i][next] = true
			adj[next][i] = true
		}
		for i := 0; i < n-3; i++ {
			var u, v int
			fmt.Fscan(in, &u, &v)
			adj[u][v] = true
			adj[v][u] = true
		}
		return adj
	}

	sourceAdj := readGraph()
	targetAdj := readGraph()

	solve := func(adj [][]bool, isTarget bool) [][2]int {
		var flips [][2]int
		for {
			neighbors := []int{}
			for i := 2; i <= n; i++ {
				if adj[1][i] {
					neighbors = append(neighbors, i)
				}
			}
			found := false
			for i := 0; i < len(neighbors)-1; i++ {
				u := neighbors[i]
				v := neighbors[i+1]
				if v-u > 1 {
					x := -1
					for k := u + 1; k < v; k++ {
						if adj[u][k] && adj[v][k] {
							x = k
							break
						}
					}
					if isTarget {
						flips = append(flips, [2]int{1, x})
					} else {
						flips = append(flips, [2]int{u, v})
					}
					adj[u][v] = false
					adj[v][u] = false
					adj[1][x] = true
					adj[x][1] = true
					found = true
					break
				}
			}
			if !found {
				break
			}
		}
		return flips
	}

	sourceFlips := solve(sourceAdj, false)
	targetFlips := solve(targetAdj, true)

	totalFlips := len(sourceFlips) + len(targetFlips)
	fmt.Fprintln(out, totalFlips)
	for _, f := range sourceFlips {
		fmt.Fprintln(out, f[0], f[1])
	}
	for i := len(targetFlips) - 1; i >= 0; i-- {
		fmt.Fprintln(out, targetFlips[i][0], targetFlips[i][1])
	}
}