← Home
```go
package main

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

const MOD = 1000000007

func power(base, exp int64) int64 {
	res := int64(1)
	base %= MOD
	for exp > 0 {
		if exp%2 == 1 {
			res = (res * base) % MOD
		}
		base = (base * base) % MOD
		exp /= 2
	}
	return res
}

func modInverse(n int64) int64 {
	return power(n, MOD-2)
}

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

	scanInt := func() int {
		scanner.Scan()
		n, _ := strconv.Atoi(scanner.Text())
		return n
	}

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

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

	fact := make([]int64, 200005)
	fact[0] = 1
	for i := 1; i <= 200000; i++ {
		fact[i] = (fact[i-1] * int64(i)) % MOD
	}

	for i := 0; i < t; i++ {
		n := scanInt()
		m1 := scanInt()
		m2 := scanInt()

		p := make([]int, m1)
		for j := 0; j < m1; j++ {
			p[j] = scanInt()
		}

		s := make([]int, m2)
		for j := 0; j < m2; j++ {
			s[j] = scanInt()
		}

		if p[0] != 1 || s[m2-1] != n || p[m1-1] != s[0] {
			fmt.Fprintln(writer, 0)
			continue
		}

		num := fact[n-1]
		den := int64(1)
		for j := 1; j < m1; j++ {
			den = (den * int64(p[j]-1)) % MOD
		}
		for j := 0; j < m2-1; j++ {
			den = (den * int64(n-s[j])) % MOD
		}

		ans := (num * modInverse(den)) % MOD
		fmt.Fprintln(writer, ans)
	}
}
```