#include #include #include #include #include #include using namespace std; const int MOD = 998244353; const int MAXN = 100010; int B[MAXN]; int C[MAXN]; int A[MAXN]; bool used[MAXN]; int main() { int T; scanf("%d", &T); while(T--) { int n ; scanf("%d",&n); B[0] = 100000000; C[0] = -1; for(int i = 1;i <= n;i++)scanf("%d",&B[i]); for(int i = 1;i <= n;i++)scanf("%d",&C[i]); bool flag = true; for(int i = 2;i <= n;i++) { if (B[i] > B[i-1]) flag = false; if(C[i] < C[i-1]) flag = false; } memset(used,false,sizeof(used)); memset(A,-1,sizeof(A)); long long ans = 1; for(int i = 1;i <= n;i++) { if(!flag)break; if (B[i] > C[i]){ flag = false; break; } if (B[i] < B[i-1] ) { A[i] = B[i]; } if(C[i] > C[i-1]) { if (A[i] != -1 && A[i] != C[i]) { flag = false; } A[i] = C[i]; } if (A[i] != -1) { if (B[i] > A[i])flag = false; if (C[i] < A[i]) flag = false; if (used[A[i]]) flag = false; used[A[i]] = true; } if (!flag)break; if (A[i] == -1) { ans = ans * (C[i] - B[i] + 1 - (i-1))%MOD; } } if (!flag) puts("0"); else { printf("%d\n",(int)ans); } } return 0; }