#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef long long ll; typedef unsigned long long ull; using namespace std; const int M=1e5+7,P=998244353; inline void Rd(int &res){ char c;res=0;int k=1; while(c=getchar(),c<45); if(c==45)k=-1,c=getchar(); do res=res*10+(c&15); while(c=getchar(),c>47); res*=k; } void print(int k){ if(!k)return; print(k/10); putchar(k%10^48); } void sc(int k){ if(k<0)putchar('-'),k*=-1; if(!k)putchar('0'); print(k); putchar('\n'); } int A[M],B[M],n; int main(){ int cas; scanf("%d",&cas); while(cas--){ scanf("%d",&n); for(int i=1;i<=n;i++)Rd(A[i]); for(int i=1;i<=n;i++)Rd(B[i]); int ti=1,ans=1; if(A[1]!=B[1])ans=0; int mi=A[1],mx=A[1]; for(int i=1;i<=n;i++){ if(A[i]mx||A[i]>mi||B[i]mx)ti+=B[i]-mx-1,ti%=P,mx=B[i]; else if(A[i]==mi&&B[i]==mx){ if(ti==0)ans=0; ans=1LL*ans*ti%P; ti--; } } printf("%d\n",ans); } return 0; }