#include <bits/stdc++.h>
#define MM 998244353
using namespace std;

struct Triplet{
    long long gcd;
    long long x;
    long long y;
};

Triplet gcdExtendedEuclid(long long a, long long b){
    // if(a < b){
    //     long long t = a;
    //     a = b;
    //     b = t;
    // }

    if(b == 0){
        return {a, 1, 0};
    }

    Triplet smallAns = gcdExtendedEuclid(b, a % b);
    Triplet myAns = {
        smallAns.gcd, 
        smallAns.y, 
        smallAns.x - (smallAns.y * (a / b))
    };

    return myAns;
}

long long modinv(long long A, long long M){
    long long x = gcdExtendedEuclid(A, M).x;
    return (x % M + M) % M; 
}


long long C(long long a, long long b){
    long long ans = 1;
    while(b > 0){
        ans = (((ans * a--) % MM) * modinv(b--, MM)) % MM;
    }
    return ans;
}
void calc(){
    long long n;
    cin >> n;
    string ss;
    cin >> ss;

    long long p = 0;
    for(long long i = 0; i < n - 1; i++){
        if(ss[i] == '1' && ss[i + 1] == '1'){
            p ++;
            i ++;
        }
    }
    long long z = 0;
    for(long long i = 0; i < n; i++){
        if(ss[i] == '0'){
            z++;
        }
    }

    //cout << "::::" << p << " " << z << endl;

    long long ans = C(p + z, p);
    cout << ans << endl;
}

int main(){
    long long t;
    cin >> t;
    while(t--){
        calc();
    }
}