← Home
```go
package main

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

type Scanner struct {
	reader *bufio.Reader
}

func (s *Scanner) NextInt() int {
	var res int
	var c byte
	for {
		c, _ = s.reader.ReadByte()
		if c > ' ' {
			break
		}
		if c == 0 {
			return 0
		}
	}
	for {
		res = res*10 + int(c-'0')
		c, _ = s.reader.ReadByte()
		if c <= ' ' {
			break
		}
	}
	return res
}

func find(i int, parent []int) int {
	root := i
	for parent[root] != root {
		root = parent[root]
	}
	curr := i
	for parent[curr] != root {
		nxt := parent[curr]
		parent[curr] = root
		curr = nxt
	}
	return root
}

func unite(i, j int, parent, size []int) {
	rootI := find(i, parent)
	rootJ := find(j, parent)
	if rootI != rootJ {
		parent[rootI] = rootJ
		size[rootJ] += size[rootI]
	}
}

func main() {
	reader := bufio.NewReaderSize(os.Stdin, 65536)
	scanner := &Scanner{reader: reader}
	writer := bufio.NewWriterSize(os.Stdout, 65536)
	defer writer.Flush()

	t := scanner.NextInt()
	if t == 0 {
		return
	}

	for i := 0; i < t; i++ {
		n := scanner.NextInt()

		p := make([]int, n+1)
		x := make([]int, n+1)
		for j := 1; j <= n; j++ {
			p[j] = scanner.NextInt()
			x[p[j]] = j
		}

		cArr := make([]int, n+1)
		for j := 1; j <= n; j++ {
			cArr[j] = scanner.NextInt()
		}

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

		for j := 1; j < n; j++ {
			if cArr[j] == cArr[j+1] {
				unite(j, j+1, parent, size)
			}
		}

		L := make([]int, n+2)
		R := make([]int, n+2)
		for j := 1; j <= n; j++ {
			L[j] = j - 1
			R[j] = j + 1
		}
		L[0] = 0
		R[n+1] = n + 1

		var ans int64 = 1
		var MOD int64 = 998244353

		for k := 1; k <= n; k++ {
			u := x[k]
			root := find(u, parent)
			currentSize := int64(size[root])
			ans = (ans * currentSize) % MOD

			size[root]--

			prev := L[u]
			next := R[u]

			if prev >= 1 {
				R[prev] = next
			}
			if next <= n {
				L[next] = prev
			}

			if prev >= 1 && next <= n && cArr[prev] == cArr[next] {
				unite(prev, next, parent, size)
			}
		}

		fmt.Fprintln(writer, ans)
	}
}
```