func_code_string: #include <bits/stdc++.h>   using namespace std;   typedef long long lint;   typedef pair<int, int> pi;   const int MAXN = 250005;      const int mod = 998244353; //1e9 + 7;//998244353;      template<typename T>   T gcd(const T &a, const T &b) {       return b == T(0) ? a : gcd(b, a % b);   }      struct mint {       int val;       mint() { val = 0; }       mint(const lint& v) {           val = (-mod <= v && v < mod) ? v : v % mod;           if (val < 0) val += mod;       }          friend ostream& operator<<(ostream& os, const mint& a) { return os << a.val; }       friend bool operator==(const mint& a, const mint& b) { return a.val == b.val; }       friend bool operator!=(const mint& a, const mint& b) { return !(a == b); }       friend bool operator<(const mint& a, const mint& b) { return a.val < b.val; }          mint operator-() const { return mint(-val); }       mint& operator+=(const mint& m) { if ((val += m.val) >= mod) val -= mod; return *this; }       mint& operator-=(const mint& m) { if ((val -= m.val) < 0) val += mod; return *this; }       mint& operator*=(const mint& m) { val = (lint)val*m.val%mod; return *this; }       friend mint ipow(mint a, lint p) {           mint ans = 1; for (; p; p /= 2, a *= a) if (p&1) ans *= a;           return ans;       }       friend mint inv(const mint& a) { assert(a.val); return ipow(a, mod - 2); }       mint& operator/=(const mint& m) { return (*this) *= inv(m); }          friend mint operator+(mint a, const mint& b) { return a += b; }       friend mint operator-(mint a, const mint& b) { return a -= b; }       friend mint operator*(mint a, const mint& b) { return a *= b; }       friend mint operator/(mint a, const mint& b) { return a /= b; }       operator int64_t() const {return val; }   };   char str[MAXN];      int main(){    int t;    scanf( %d ,&t);    while(t--){     int n;     scanf( %d ,&n);     scanf( %s , str);     int empt = n;     int ret = 0;     for(int i = 0; i < n; i++){      if(str[i] ==  0 ) continue;      int e = i;      while(e < n && str[e] ==  1 ) e++;      empt -= e - i;    //  if((e - i) % 2) empt--;      ret += (e - i) / 2;      i = e;     }     mint dap = 1, divi = 1;     for(int i = 0; i < empt + ret; i++) dap *= mint(i + 1);     for(int i = 0; i < empt; i++) divi *= mint(i + 1);     for(int i = 0; i < ret; i++) divi *= mint(i + 1);     cout << dap / divi << endl;    }   }   