#include <iostream>
#include <vector>

using namespace std;

const int MAXN = 1000005;

int parent_node[MAXN];
int size_node[MAXN];

int find_set(int v) {
    if (v == parent_node[v])
        return v;
    return parent_node[v] = find_set(parent_node[v]);
}

void union_sets(int a, int b, int &components) {
    a = find_set(a);
    b = find_set(b);
    
    if (a != b) {
        if (size_node[a] < size_node[b]) {
            swap(a, b);
        }
        parent_node[b] = a;
        size_node[a] += size_node[b];
        components--;
    }
}

int main() {
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n;
    if (!(cin >> n)) return 0;
    for (int i = 1; i <= n; i++) {
        parent_node[i] = i;
        size_node[i] = 1;
    }

    int components = n; 

    for (int i = 1; i <= n; i++) {
        int key_location;
        cin >> key_location;
        union_sets(i, key_location, components);
    }
    cout << components << "\n";

    return 0;
}