02b129e4aeef241098377bf80d3879f2b884f42b73389cdb8ad1387c8da82a1b
// tresc: https://szkopul.edu.pl/problemset/problem/NQamRQ2UZEwn6gPqo-l6nat9/site/?key=statement
// OIG I (2 etap)
#include <iostream>
#include <vector>
constexpr int MILION = 1000000;
const int sizik = MILION + 8;
bool arr[sizik];
std::vector<int> kra[sizik];
int DFS(int v) {
if (arr[v]) {
return 0;
}
arr[v] = true;
for (int i = 0; i < kra[v].size(); i++) {
DFS(kra[v][i]);
}
return 1;
}
int main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
int n;
std::cin >> n;
for (int i = 1; i <= n; i++) {
int a;
std::cin >> a;
kra[i].push_back(a);
}
int stoly = 0;
for (int i = 1; i <= n; i++) {
stoly += DFS(i);
}
std::cout << stoly;
return 0;
}