#include #include void exchange(int *a, int *b){ int x = *a; *a = *b; *b = x; } int main(){ int *n; int N; int i; int last; int count; //int x; while(scanf("%d", &N) > 0){ count = 0; n = (int*)malloc(N*sizeof(int)); for(i = 0; i < N; i++){ scanf("%d", n + i); n[i]--; } i = 0; while(n[i] == i){ i++; } if(i > N-1){ printf("0\n"); continue; } last = i; while(1){ if(last == n[n[last]]){ exchange(n + last, n + n[last]); count++; while((last < N)&&(n[last] == last)){ last++; } if(last > N - 1){ printf("%d\n", count); break; } }else { i = last; while ((i < N)&&((n[n[i]] != i)||(i==n[i]))){ i++; } //printf("%d %d %d \n", i, n[i], n[n[i]]); if(i > N - 1){ exchange(&(n[last]), &(n[n[last]])); }else{ // printf("%d %d %d %d\n", n[0], n[1], n[2], n[3]); exchange(n + i, n + n[i]); } count++; } } } return 0; }