#include #include using namespace std; using namespace atcoder; typedef long long int ll; typedef long double ld; #define FOR(i,l,r) for(ll i=l;i=l;i--) #define RREP(i,n) RFOR(i,0,n) #define ALL(x) x.begin(),x.end() #define P pair #define F first #define S second #define BS(A,x) binary_search(ALL(A),x) #define LB(A,x) (ll)(lower_bound(ALL(A),x)-A.begin()) #define UB(A,x) (ll)(upper_bound(ALL(A),x)-A.begin()) #define COU(A,x) UB(A,x)-LB(A,x) templateusing min_priority_queue=priority_queue,greater>; //using mint=modint1000000007; using mint=modint998244353; signed main(){ ll N;cin>>N; vectorA(N),B(N); REP(i,N){cin>>A[i];B[A[i]]=i;} mint ans=1; ll l=B[0],r=B[0],s=1,mex=1; vectorseen(N+1,0);seen[0]=1; while(sr){FOR(i,r+1,B[s]+1)seen[A[i]]=1;r=B[s];} ll k=mex;while(seen[mex])mex++; REP(i,mex-k-1)ans*=r-l-s-i; } //cout<