← Home
package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(reader, &n)

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

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

	visA := make([]bool, n+1)
	cycleA := make([]int, n+1)
	idA := 0
	for i := 1; i <= n; i++ {
		if !visA[i] {
			idA++
			curr := i
			for !visA[curr] {
				visA[curr] = true
				cycleA[curr] = idA
				curr = a[curr]
			}
		}
	}

	visB := make([]bool, n+1)
	cycleB := make([]int, n+1)
	idB := 0
	for i := 1; i <= n; i++ {
		if !visB[i] {
			idB++
			curr := i
			for !visB[curr] {
				visB[curr] = true
				cycleB[curr] = idB
				curr = b[curr]
			}
		}
	}

	adj := make([][]int, idA+1)
	for i := 1; i <= n; i++ {
		u := cycleA[i]
		adj[u] = append(adj[u], i)
	}

	match := make([]int, idB+1)
	vis := make([]bool, idB+1)

	var dfs func(u int) bool
	dfs = func(u int) bool {
		for _, i := range adj[u] {
			v := cycleB[i]
			if !vis[v] {
				vis[v] = true
				if match[v] == 0 || dfs(cycleA[match[v]]) {
					match[v] = i
					return true
				}
			}
		}
		return false
	}

	for u := 1; u <= idA; u++ {
		for j := 1; j <= idB; j++ {
			vis[j] = false
		}
		dfs(u)
	}

	inU := make([]bool, n+1)
	for v := 1; v <= idB; v++ {
		if match[v] != 0 {
			inU[match[v]] = true
		}
	}

	var ans []int
	for i := 1; i <= n; i++ {
		if !inU[i] {
			ans = append(ans, i)
		}
	}

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