#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int> ljb[1000005];
int n;
int dfn[1000005],low[1000005];
int now;
bool in[1000005];
int belone[1000005];
stack<int> stk;
int cnt;
int rd[1000005];
int ans;
void tarjan(int cur){
dfn[cur]=low[cur]=++now;
stk.push(cur);in[cur]=true;
for(int i=0;i<ljb[cur].size();i++){
int v=ljb[cur][i];
if(!dfn[v]){
tarjan(v);
low[cur]=min(low[cur],low[v]);
}else{
if(in[v]){
low[cur]=min(low[cur],dfn[v]);
}
}
}
if(dfn[cur]==low[cur]){
cnt++;
while(stk.top()!=cur){
int tmp=stk.top();
stk.pop();
belone[tmp]=cnt;
in[tmp]=false;
}
in[cur]=false;
belone[cur]=cnt;
stk.pop();
}
return;
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
int x;
scanf("%lld",&x);
ljb[i].push_back(x);
}
for(int i=1;i<=n;i++){
if(!dfn[i])tarjan(i);
}
for(int i=1;i<=n;i++){
for(int j=0;j<ljb[i].size();j++){
int v=ljb[i][j];
int fx=belone[i];
int fy=belone[v];
if(fx==fy){
continue;
}
rd[fy]++;
}
}
for(int i=1;i<=cnt;i++){
if(!rd[i]){
ans++;
}
}
printf("%lld",ans);
return 0;
}
/*
4
2
1
2
4
*/
/ll/ll
机房同学都没看出哪有问题