#include #include #include #include #include #include #include #include #include #include #define N 100005 #define P 998244353 typedef long long ll; typedef unsigned long long ull; const int INF=1<<30; const ll inf=1LL<<60; using namespace std; void Rd(int &res){ char c;res=0; while(c=getchar(),c<48); do res=res*10+(c&15); while(c=getchar(),c>47); } void print(int k){ if(!k)return; print(k/10); putchar(k%10^48); } void sc(int k){ if(!k)putchar('0'); else print(k); putchar('\n'); } int T,n,b[N],c[N]; int f[N]; void solve(){ scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&b[i]); for(int i=1;i<=n;i++)scanf("%d",&c[i]); for(int i=2;i<=n;i++){ if(b[i]>b[i-1]||c[i]c[i-1]){ printf("0\n"); return; }else if(b[i]c[i-1]){ cnt+=c[i]-c[i-1]-1; }else{ ans=1LL*ans*cnt%P; cnt--; } } cout<