#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define f(i, x, n) for (int i = x; i < (int)(n); ++i)
const int N = 1e6 + 10, mod = 998244353;
const double eps = 1e-7;

inline int add(int a, int b) { return a + b >= mod ? a + b - mod : a + b; }
inline int mul(int a, int b) { return (ll)a * b % mod; }

int n;
string s;

ll fact[1000001], inv[1000001];// mod inv = n ^ mod-2
ll FastPower(int a, int b)
{
    if(b == 0)
        return 1;
    ll res = FastPower(a, b/2);
    if(b%2)
        return res * res % mod * a % mod;
    return res * res % mod;
}
ll nCk(int n, int k)
{
	if(n < k)
		return 0;
    return fact[n] * inv[k] % mod * inv[n-k] % mod;
}

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
#endif

	fact[0] = 1;
    inv[0] = FastPower(1, mod-2);
    for(int i=1; i<=1000000; ++i)
    {
        fact[i] = fact[i-1] * i % mod;
        inv[i] = FastPower(fact[i], mod-2);
    }
	int t;
	cin >> t;
	while(t--)
    {
		cin >> n >> s;
		vector<int> a;
		for(int i=0; i<n; ++i){
			if(i < n-1 && s[i] == '1' && s[i+1] == '1'){
				a.push_back(2);
				++i;
				continue;
			}
			a.push_back(s[i]-'0');
		}
		n = a.size();
		ll ans = 1;
		int space = 0, nof2 = 0;
		for(int i=0; i<n; ++i){
			//cout << a[i] << ' ';
			nof2 += a[i] == 2;
			space += a[i] == 0;
		}
		ans = nCk(nof2+space, space);
		cout << ans << '\n';
    }
	

}