#include #include #include const int Mod = 998244353; int n, min[100005], max[100005]; namespace BIT { int c[100005]; #define lowbit(x) ((x) & -(x)) void init(int lim) { for (int i = 1; i <= lim; ++i) c[i] = lowbit(i); } void modify(int pos, int val) { for (int i = pos; i <= n; i += lowbit(i)) c[i] += val; } int query(int pos) { int ret = 0; for (int i = pos; i > 0; i -= lowbit(i)) ret += c[i]; return ret; } } int main() { int T; scanf("%d", &T); while (T--) { scanf("%d", &n); for (int i = 1; i <= n; ++i) scanf("%d", min + i); for (int i = 1; i <= n; ++i) scanf("%d", max + i); BIT::init(n); bool flag = max[1] == min[1]; int ans = 1; for (int i = 1; i <= n; ++i) { if (max[i] < min[i] || (i != 1 && (max[i] < max[i - 1] || min[i] > min[i - 1] || (max[i] > max[i - 1] && min[i] < min[i - 1])))) { flag = 0; break; } if (max[i] > max[i - 1]) BIT::modify(max[i], -1); if (min[i] < min[i - 1]) BIT::modify(min[i], -1); } for (int i = 1; i <= n; ++i) if (max[i] == max[i - 1] && min[i] == min[i - 1]) { int tmp = BIT::query(max[i]) - BIT::query(min[i] - 1); if (tmp < 0) flag = 0; ans = 1ll * ans * tmp % Mod; BIT::modify(min[i], -1); } printf("%d\n", flag ? ans : 0); } return 0; }