#include <bits/stdc++.h>
using namespace std;
const int N = 4e5 + 3;
int par[N];
int r[N];
int find(int u) {
if (par[u] == u) return u;
return par[u] = find(par[u]);
}
void unite(int u, int v) {
if (par[u] == par[v]) return;
int u_p = find(u);
int v_p = find(v);
if (r[u_p] > r[v_p]) {
par[v_p] = u_p;
r[u_p]++;
} else {
par[u_p] = v_p;
r[v_p]++;
}
}
void solve() {
int n;
cin >> n;
vector<int> row1(n + 1), row2(n + 1);
for (int i = 1; i <= n; i++) cin >> row1[i];
for (int i = 1; i <= n; i++) cin >> row2[i];
memset(r, 0, (n + 1) * 4);
for (int i = 1; i <= n; i++) par[i] = i;
for (int i = 1; i <= n; i++) {
unite(row1[i], row2[i]);
}
unordered_set<int> seen;
for (int i = 1; i <= n; i++) {
int p = find(row1[i]);
if (seen.find(p) == seen.end()) {
seen.insert(p);
}
}
int sz = seen.size();
cout << (1 << sz) << endl;
}
int main() {
int t;
cin >> t;
while (t--) solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDRlNSArIDM7CmludCBwYXJbTl07CmludCByW05dOwoKaW50IGZpbmQoaW50IHUpIHsKCWlmIChwYXJbdV0gPT0gdSkgcmV0dXJuIHU7CglyZXR1cm4gcGFyW3VdID0gZmluZChwYXJbdV0pOwp9Cgp2b2lkIHVuaXRlKGludCB1LCBpbnQgdikgewoJaWYgKHBhclt1XSA9PSBwYXJbdl0pIHJldHVybjsKCWludCB1X3AgPSBmaW5kKHUpOwoJaW50IHZfcCA9IGZpbmQodik7CglpZiAoclt1X3BdID4gclt2X3BdKSB7CgkJcGFyW3ZfcF0gPSB1X3A7CgkJclt1X3BdKys7Cgl9IGVsc2UgewoJCXBhclt1X3BdID0gdl9wOwoJCXJbdl9wXSsrOwoJfQp9Cgp2b2lkIHNvbHZlKCkgewoJaW50IG47CgljaW4gPj4gbjsKCXZlY3RvcjxpbnQ+IHJvdzEobiArIDEpLCByb3cyKG4gKyAxKTsKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IHJvdzFbaV07Cglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiByb3cyW2ldOwoJCgltZW1zZXQociwgMCwgKG4gKyAxKSAqIDQpOwoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBwYXJbaV0gPSBpOwoJCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCQl1bml0ZShyb3cxW2ldLCByb3cyW2ldKTsKCX0KCQoJdW5vcmRlcmVkX3NldDxpbnQ+IHNlZW47Cglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCQlpbnQgcCA9IGZpbmQocm93MVtpXSk7CgkJaWYgKHNlZW4uZmluZChwKSA9PSBzZWVuLmVuZCgpKSB7CgkJCXNlZW4uaW5zZXJ0KHApOwoJCX0KCX0KCQoJCglpbnQgc3ogPSBzZWVuLnNpemUoKTsKCWNvdXQgPDwgKDEgPDwgc3opIDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewoJaW50IHQ7CgljaW4gPj4gdDsKCXdoaWxlICh0LS0pIHNvbHZlKCk7Cn0=