#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define rep(i, init, end) for(ll i = init; i < end; i++) #define REP(i, init, end) for(ll i = init; i < end + 1; i++) #define rev(i, end, init) for(ll i = init - 1; i >= end; i--) #define REV(i, end, init) for(ll i = init; i >= end; i--) #define PI 3.14159265359 #define EPS 0.0000000001 // #define MOD 1000000007 //cout << std::fixed << std::setprecision(15) << y << endl; int main(){ ll N; cin >> N; ll A[N + 1]; vector from[N + 1]; rep(i, 1, N + 1){ cin >> A[i]; from[A[i]].push_back(i); } ll fromCount[N + 1]; rep(i, 1, N + 1){ fromCount[i] = from[i].size(); } bool visited[N + 1]; rep(i, 1, N + 1){ visited[i] = false; } ll ans = 0; rep(i, 1, N + 1){ if(!visited[i] && fromCount[i] > 0){ stack st; st.push(i); ll p; while(!st.empty()){ p = st.top(); st.pop(); if(visited[p]){ if(p == i){ ans++;//cout << "i: " << i << endl; } continue; } visited[p] = true; st.push(A[p]); } } } cout << ans << endl; return 0; }