← Home
```go
package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(reader, &n)
	p := make([]int, n+1)
	for i := 1; i <= n; i++ {
		fmt.Fscan(reader, &p[i])
	}
	var m int
	fmt.Fscan(reader, &m)

	visited := make([]bool, n+1)
	cycles := 0
	for i := 1; i <= n; i++ {
		if !visited[i] {
			cycles++
			curr := i
			for !visited[curr] {
				visited[curr] = true
				curr = p[curr]
			}
		}
	}

	k := n - cycles
	ans := []int{}

	if k > m {
		x := 1
		for k > m {
			for p[x] == x {
				x++
			}
			curr := p[x]
			bestY := curr
			for curr != x {
				if curr < bestY {
					bestY = curr
				}
				curr = p[curr]
			}
			ans = append(ans, x, bestY)
			p[x], p[bestY] = p[bestY], p[x]
			k--
		}
	} else if k < m {
		for k < m {
			inCycle := make([]bool, n+1)
			curr := 1
			for {
				inCycle[curr] = true
				curr = p[curr]
				if curr == 1 {
					break
				}
			}
			y := 2
			for inCycle[y] {
				y++
			}
			ans = append(ans, 1, y)
			p[1], p[y] = p[y], p[1]
			k++
		}
	}

	fmt.Println(len(ans) / 2)
	for i, v := range ans {
		if i > 0 {
			fmt.Print(" ")
		}
		fmt.Print(v)
	}
	fmt.Println()
}
```