#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
// Disjoint Set Union to find connected components
struct DSU {
vector<int> parent;
DSU(int n) {
parent.resize(n + 1);
iota(parent.begin(), parent.end(), 0);
}
int find(int i) {
if (parent[i] == i)
return i;
return parent[i] = find(parent[i]);
}
void unite(int i, int j) {
int root_i = find(i);
int root_j = find(j);
if (root_i != root_j) {
parent[root_i] = root_j;
}
}
};
void solve() {
int n;
cin >> n;
vector<int> a(n), b(n);
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < n; i++) cin >> b[i];
vector<int> in(n + 1, 0), out(n + 1, 0);
vector<char> has_edge(n + 1, 0);
DSU dsu(n);
// Build the graph degrees and components
for (int i = 0; i < n; i++) {
int u = a[i];
int v = b[i];
out[u]++;
in[v]++;
dsu.unite(u, v);
has_edge[u] = 1;
has_edge[v] = 1;
}
// Calculate total imbalance jumps needed
long long d_total = 0;
for (int i = 1; i <= n; i++) {
if (out[i] > in[i]) {
d_total += out[i] - in[i];
}
}
vector<char> is_root(n + 1, 0);
vector<char> is_balanced(n + 1, 1);
// Analyze the components
for (int i = 1; i <= n; i++) {
if (has_edge[i]) {
int r = dsu.find(i);
is_root[r] = 1;
if (in[i] != out[i]) {
is_balanced[r] = 0; // Component has a degree mismatch
}
}
}
int comp = 0;
int bal = 0;
for (int i = 1; i <= n; i++) {
if (is_root[i]) {
comp++;
if (is_balanced[i]) {
bal++;
}
}
}
// Determine the minimum jumps required
int j = 0;
if (d_total > 0) {
j = d_total + bal;
} else {
if (comp == 1) {
j = 0;
} else {
j = comp;
}
}
// Matches is Total Edges minus Jumps
cout << n - j << "\n";
}
int main() {
// Fast I/O
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t;
if (cin >> t) {
while (t--) {
solve();
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBEaXNqb2ludCBTZXQgVW5pb24gdG8gZmluZCBjb25uZWN0ZWQgY29tcG9uZW50cwpzdHJ1Y3QgRFNVIHsKICAgIHZlY3RvcjxpbnQ+IHBhcmVudDsKICAgIERTVShpbnQgbikgewogICAgICAgIHBhcmVudC5yZXNpemUobiArIDEpOwogICAgICAgIGlvdGEocGFyZW50LmJlZ2luKCksIHBhcmVudC5lbmQoKSwgMCk7CiAgICB9CiAgICBpbnQgZmluZChpbnQgaSkgewogICAgICAgIGlmIChwYXJlbnRbaV0gPT0gaSkKICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgcmV0dXJuIHBhcmVudFtpXSA9IGZpbmQocGFyZW50W2ldKTsKICAgIH0KICAgIHZvaWQgdW5pdGUoaW50IGksIGludCBqKSB7CiAgICAgICAgaW50IHJvb3RfaSA9IGZpbmQoaSk7CiAgICAgICAgaW50IHJvb3RfaiA9IGZpbmQoaik7CiAgICAgICAgaWYgKHJvb3RfaSAhPSByb290X2opIHsKICAgICAgICAgICAgcGFyZW50W3Jvb3RfaV0gPSByb290X2o7CiAgICAgICAgfQogICAgfQp9OwoKdm9pZCBzb2x2ZSgpIHsKICAgIGludCBuOwogICAgY2luID4+IG47CiAgICB2ZWN0b3I8aW50PiBhKG4pLCBiKG4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIGNpbiA+PiBhW2ldOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIGNpbiA+PiBiW2ldOwoKICAgIHZlY3RvcjxpbnQ+IGluKG4gKyAxLCAwKSwgb3V0KG4gKyAxLCAwKTsKICAgIHZlY3RvcjxjaGFyPiBoYXNfZWRnZShuICsgMSwgMCk7CiAgICBEU1UgZHN1KG4pOwoKICAgIC8vIEJ1aWxkIHRoZSBncmFwaCBkZWdyZWVzIGFuZCBjb21wb25lbnRzCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGludCB1ID0gYVtpXTsKICAgICAgICBpbnQgdiA9IGJbaV07CiAgICAgICAgb3V0W3VdKys7CiAgICAgICAgaW5bdl0rKzsKICAgICAgICBkc3UudW5pdGUodSwgdik7CiAgICAgICAgaGFzX2VkZ2VbdV0gPSAxOwogICAgICAgIGhhc19lZGdlW3ZdID0gMTsKICAgIH0KCiAgICAvLyBDYWxjdWxhdGUgdG90YWwgaW1iYWxhbmNlIGp1bXBzIG5lZWRlZAogICAgbG9uZyBsb25nIGRfdG90YWwgPSAwOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgaWYgKG91dFtpXSA+IGluW2ldKSB7CiAgICAgICAgICAgIGRfdG90YWwgKz0gb3V0W2ldIC0gaW5baV07CiAgICAgICAgfQogICAgfQoKICAgIHZlY3RvcjxjaGFyPiBpc19yb290KG4gKyAxLCAwKTsKICAgIHZlY3RvcjxjaGFyPiBpc19iYWxhbmNlZChuICsgMSwgMSk7CgogICAgLy8gQW5hbHl6ZSB0aGUgY29tcG9uZW50cwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgaWYgKGhhc19lZGdlW2ldKSB7CiAgICAgICAgICAgIGludCByID0gZHN1LmZpbmQoaSk7CiAgICAgICAgICAgIGlzX3Jvb3Rbcl0gPSAxOwogICAgICAgICAgICBpZiAoaW5baV0gIT0gb3V0W2ldKSB7CiAgICAgICAgICAgICAgICBpc19iYWxhbmNlZFtyXSA9IDA7IC8vIENvbXBvbmVudCBoYXMgYSBkZWdyZWUgbWlzbWF0Y2gKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpbnQgY29tcCA9IDA7CiAgICBpbnQgYmFsID0gMDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGlmIChpc19yb290W2ldKSB7CiAgICAgICAgICAgIGNvbXArKzsKICAgICAgICAgICAgaWYgKGlzX2JhbGFuY2VkW2ldKSB7CiAgICAgICAgICAgICAgICBiYWwrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvLyBEZXRlcm1pbmUgdGhlIG1pbmltdW0ganVtcHMgcmVxdWlyZWQKICAgIGludCBqID0gMDsKICAgIGlmIChkX3RvdGFsID4gMCkgewogICAgICAgIGogPSBkX3RvdGFsICsgYmFsOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoY29tcCA9PSAxKSB7CiAgICAgICAgICAgIGogPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGogPSBjb21wOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBNYXRjaGVzIGlzIFRvdGFsIEVkZ2VzIG1pbnVzIEp1bXBzCiAgICBjb3V0IDw8IG4gLSBqIDw8ICJcbiI7Cn0KCmludCBtYWluKCkgewogICAgLy8gRmFzdCBJL08KICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIAogICAgaW50IHQ7CiAgICBpZiAoY2luID4+IHQpIHsKICAgICAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgICAgIHNvbHZlKCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0=