import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class O1742 { public static void main(String[] args) throws IOException { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(r.readLine()); int[] funcGraph = new int[n]; int[] degree = new int[n]; for (int i = 0; i < n; i++) { funcGraph[i] = Integer.parseInt(r.readLine()) - 1; degree[funcGraph[i]]++; } int loopedVertices = 0; int loopCount = 0; int closedLoopCount = 0; int starterVerticles = 0; int[] visited = new int[n]; for (int i = 0; i < n; i++) { if(degree[i] == 0) starterVerticles++; if(visited[i] != 0) continue; int j = 1; int cur = i; List path = new ArrayList<>(); while(visited[cur] == 0) { visited[cur] = j++; path.add(cur); cur = funcGraph[cur]; } int size = j - visited[cur]; List loop = path.subList(visited[cur] - 1, path.size()); boolean isClosed = true; for(int id : loop) { if(degree[id] > 1) { isClosed = false; break; } } loopedVertices += size; loopCount++; if(isClosed) { closedLoopCount++; } } System.out.print(starterVerticles + closedLoopCount); System.out.print(" "); System.out.println(n - loopedVertices + loopCount); } }