← Home
```go
package main

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

const MOD = 998244353
const MAX = 200005

var fact []int64
var invFact []int64

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

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

func initFacts() {
	fact = make([]int64, MAX)
	invFact = make([]int64, MAX)
	fact[0] = 1
	for i := 1; i < MAX; i++ {
		fact[i] = (fact[i-1] * int64(i)) % MOD
	}
	invFact[MAX-1] = inverse(fact[MAX-1])
	for i := MAX - 2; i >= 0; i-- {
		invFact[i] = (invFact[i+1] * int64(i+1)) % MOD
	}
}

func nCr(n, r int) int64 {
	if r < 0 || r > n {
		return 0
	}
	return (((fact[n] * invFact[r]) % MOD) * invFact[n-r]) % MOD
}

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

	var t int
	fmt.Fscan(reader, &t)

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

		zeros := 0
		pairs := 0
		for j := 0; j < n; j++ {
			if s[j] == '0' {
				zeros++
			} else {
				if j+1 < n && s[j+1] == '1' {
					pairs++
					j++
				}
			}
		}

		ans := nCr(pairs+zeros, zeros)
		fmt.Fprintln(writer, ans)
	}
}
```