#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> p(n+1);
for (int i = 1; i <= n; i++) {
cin >> p[i];
}
vector<bool> visited(n+1, false);
ll ans = 0;
for (int i = 1; i <= n; i++) {
if (!visited[i]) {
// Follow this cycle
int curr = i;
int length = 0;
while (!visited[curr]) {
visited[curr] = true;
curr = p[curr];
length++;
}
// If its length >= 3, it costs floor(length/2) swaps
if (length >= 3) {
ans += ((length - 1)/ 2);
}
// length=1 or 2 cost zero swaps
}
}
cout << ans << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGludCB0OwogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgaW50IG47CiAgICAgICAgY2luID4+IG47CgogICAgICAgIHZlY3RvcjxpbnQ+IHAobisxKTsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgY2luID4+IHBbaV07CiAgICAgICAgfQoKICAgICAgICB2ZWN0b3I8Ym9vbD4gdmlzaXRlZChuKzEsIGZhbHNlKTsKICAgICAgICBsbCBhbnMgPSAwOwoKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgaWYgKCF2aXNpdGVkW2ldKSB7CiAgICAgICAgICAgICAgICAvLyBGb2xsb3cgdGhpcyBjeWNsZQogICAgICAgICAgICAgICAgaW50IGN1cnIgPSBpOwogICAgICAgICAgICAgICAgaW50IGxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICB3aGlsZSAoIXZpc2l0ZWRbY3Vycl0pIHsKICAgICAgICAgICAgICAgICAgICB2aXNpdGVkW2N1cnJdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjdXJyID0gcFtjdXJyXTsKICAgICAgICAgICAgICAgICAgICBsZW5ndGgrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIElmIGl0cyBsZW5ndGggPj0gMywgaXQgY29zdHMgZmxvb3IobGVuZ3RoLzIpIHN3YXBzCiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID49IDMpIHsKICAgICAgICAgICAgICAgICAgICBhbnMgKz0gKChsZW5ndGggLSAxKS8gMik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBsZW5ndGg9MSBvciAyIGNvc3QgemVybyBzd2FwcwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBjb3V0IDw8IGFucyA8PCAiXG4iOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==