#include <stdio.h>
#include <algorithm>
using namespace std;
const int maxn = 100010;
int main(){
int n;
int ans = 0; // 交换次数
scanf("%d", &n);
int left = n-1; // 数字不在本位上的个数,
int pos[maxn];
for(int i = 0; i < n; i++){
int num;
scanf("%d", &num);
pos[num] = i; // num-数字,pos[num]-数字存放位置
if(num == i && num != 0) {
left--;
}
}
int k = 1; // 不在本位上的最小的数
while(left > 0){
if(pos[0] == 0){ // 0在本位上
while(k < n){
if(pos[k] != k){
swap(pos[0], pos[k]);
ans++;
break;
}
k++;
}
}
if(pos[0] != 0){ // 如果 0 不在本位上
swap(pos[0], pos[pos[0]]);
ans++;
left--;
}
}
printf("%d\n", ans);
return 0;
}