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)
}
}
}