#include #include #include #include #define ull unsigned long long #define ll long long #define d double using namespace std; const int maxn=100233,modd=998244353; int a[maxn],b[maxn],f[maxn]; int i,j,k,n,m; int ra;char rx; inline int read(){ rx=getchar(),ra=0; while(rx<'0'||rx>'9')rx=getchar(); while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra; } int main(){ for(int T=read();T;T--){ n=read(); for(i=1;i<=n;i++)a[i]=read(); for(i=1;i<=n;i++)b[i]=read(); if(a[1]!=b[1]){puts("0");continue;} f[1]=1; for(i=2;i<=n;i++){ if(a[i]==a[i-1]&&b[i]>b[i-1])f[i]=f[i-1];else if(a[i]=i)f[i]=1ll*f[i-1]*(b[i]-a[i]+1-(i-1))%modd;//,printf(" %d %d\n",i,b[i]-a[i]+1); else break; } if(i<=n)puts("0");else printf("%d\n",f[n]); } }