import sys # 再帰呼び出しの上限を増やす sys.setrecursionlimit(300000) def main(): # 入力の高速化 input = sys.stdin.read data = input().split() N = int(data[0]) A = [0] * (N + 1) for i in range(1, N + 1): A[i] = int(data[i]) # DSU クラスの実装 class DSU: def __init__(self, n): self.parent_or_size = [-1] * n def leader(self, a): if self.parent_or_size[a] < 0: return a self.parent_or_size[a] = self.leader(self.parent_or_size[a]) return self.parent_or_size[a] def same(self, a, b): return self.leader(a) == self.leader(b) def merge(self, a, b): x, y = self.leader(a), self.leader(b) if x == y: return False if -self.parent_or_size[x] < -self.parent_or_size[y]: x, y = y, x self.parent_or_size[x] += self.parent_or_size[y] self.parent_or_size[y] = x return True dsu = DSU(N + 1) cycle_count = 0 for i in range(1, N + 1): if dsu.same(i, A[i]): cycle_count += 1 else: dsu.merge(i, A[i]) print(cycle_count) if __name__ == '__main__': main()