hash 归位
#include<bits/stdc++.h>
using namespace std;
#define LOCAL
#define ll long long int
#define inf 0x3f3f3f3f
#define mset(a,b) memset(a,b,sizeof(a))
const int maxn=1e4+5;
int a[maxn],b[maxn];
/*
蓝桥杯省赛-2016-C/C++-B-9
*/
void Swap(int &aa,int &bb){
int t=aa;
aa=bb;
bb=t;
}
void solve(){
int n;
int ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d",a+i);
b[a[i]]=i;//使用b数组记录 a[i]应该出现在什么位置
}
for(int i=1;i<=n;i++){
if(a[i]!=i){
int q=b[i],p=a[i];
Swap(a[b[i]],a[i]);
b[a[i]]=i;
b[p]=q;
ans++;
}
}
printf("%d\n",ans);
}
int main(){
#ifdef LOCAL
freopen("in.in","r",stdin);
#endif
solve();
return 0;
}