← Home
package main

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

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

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

	for tc := 0; tc < t; tc++ {
		var n int
		fmt.Fscan(reader, &n)

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

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

		parent := make([]int, n+1)
		for i := 1; i <= n; i++ {
			parent[i] = i
		}

		var find func(i int) int
		find = func(i int) int {
			if parent[i] == i {
				return i
			}
			parent[i] = find(parent[i])
			return parent[i]
		}

		union := func(i, j int) bool {
			rootI := find(i)
			rootJ := find(j)
			if rootI != rootJ {
				parent[rootI] = rootJ
				return true
			}
			return false
		}

		deg := make([]int, n+1)
		S := 0
		K := n

		for i := 0; i < n; i++ {
			u := a[i]
			v := b[i]
			deg[u]++
			deg[v]++
			if u == v {
				S++
			}
			if union(u, v) {
				K--
			}
		}

		valid := true
		for i := 1; i <= n; i++ {
			if deg[i] != 2 {
				valid = false
				break
			}
		}

		if !valid {
			fmt.Fprintln(writer, 0)
		} else {
			ans := 1
			for i := 0; i < S; i++ {
				ans = (ans * n) % 998244353
			}
			for i := 0; i < K-S; i++ {
				ans = (ans * 2) % 998244353
			}
			fmt.Fprintln(writer, ans)
		}
	}
}