//謎の呪文 #ifdef ONLINE_JUDGE //あとこだ #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #else //手元 #endif #include #include using namespace std; using namespace atcoder; using ll=long long; using ld=long double; using vl=vector; using vb=vector; templateusing ve=vector; templateusing ar=array; templateusing pq=priority_queue>; templateusing pq_g=priority_queue, greater>; #define print(a) cout<(b);i--) #define all(v) v.begin(),v.end() #define dall(v) v.rbegin(),v.rend() #define pyes print("Yes") #define pno print("No") templateistream&operator>>(istream&i,vector&v){rep(j,0,(ll)size(v))i>>v[j];return i;} templateistream&operator>>(istream&i,array&v){rep(j,0,(ll)N)i>>v[j];return i;} //ほんへ using mint=modint998244353; int main(){ //呪い ios::sync_with_stdio(false); cin.tie(nullptr); //やれ ll n; string a; cin>>n>>a; vl pos; if(a[0]=='0')pos.push_back(-1); if(a[n-1]=='1')pos.push_back(n-1); rep(i,0,n-1)if(a[i]=='1'&&a[i+1]=='0')pos.push_back(i); sort(all(pos)); mint res=1; rep(i,1,pos.size())res*=1+pos[i]-pos[i-1]; print(res.val()); } //cp template.cpp a.cpp