← Home
package main

import (
	"bufio"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	buf := make([]byte, 1024*1024)
	scanner.Buffer(buf, bufio.MaxScanTokenSize)

	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	if !scanner.Scan() {
		return
	}
	t, _ := strconv.Atoi(scanner.Text())

	for i := 0; i < t; i++ {
		scanner.Scan()
		n, _ := strconv.Atoi(scanner.Text())

		ca := make([]int, n)
		for j := 0; j < n; j++ {
			scanner.Scan()
			ca[j], _ = strconv.Atoi(scanner.Text())
		}

		nxt := make([]int, n+1)
		for j := 0; j < n; j++ {
			scanner.Scan()
			cb, _ := strconv.Atoi(scanner.Text())
			nxt[ca[j]] = cb
		}

		visited := make([]bool, n+1)
		var c int64 = 0

		for j := 1; j <= n; j++ {
			if !visited[j] {
				length := 0
				curr := j
				for !visited[curr] {
					visited[curr] = true
					curr = nxt[curr]
					length++
				}
				c += int64(length / 2)
			}
		}

		ans := 2 * c * (int64(n) - c)
		out.WriteString(strconv.FormatInt(ans, 10) + "\n")
	}
}