3
2 1 1
 6
6 2 6 2 4 2
 2
1 2
 8
2 1 2 2 6 5 6 6
 18
2 3 4 5 2 7 8 9 10 7 11 12 14 15 13 17 18 18
 7
1 2 3 4 5 6 7
 7
4 3 2 6 3 5 2
 7
7 5 3 1 2 1 5
 7
1 6 4 4 5 6 7

1
2 2 1  0
6 2 6 2 4 2  1 
1 1 
 2 
2 2 2 2 6 2 6 6 
 5 
2 3 4 5 11 7 8 9 10 11 11 11 14 15 11 17 18 11 
 6 
1 1 1 1 1 1 1 
 1
4 3 3 6 3 5 2  1
7 5 3 1 3 1 5  4 
1 6 4 1 1 1 1 

import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt(), p[] = new int[n+1], i, root = -1, c = 0, seen[] = new int[n+1];
		
		for (i=1; i<n+1; i++)
			p[i] = sc.nextInt();
		
		for(i=1; i<n+1; i++)
			if(p[i] == i){
				seen[i] = n+1;
				root = i;
				break;				
			}
		
		for (i=1; i<n+1; i++){
			
			// if(seen[i] != 0) continue;
			seen[i] = i;
			int at = i;
			
			while(seen[p[at]] == 0){
				at = p[at];
				seen[at] = i;
			}
			
			if(seen[p[at]] == i){
				c++;
				if(root != -1)
					p[at] = root;
				else{
					p[at] = at;
					root = at;
				}
			}
		}
		
		System.out.println(c);
		for(i =1; i <= n; i++)
			System.out.print(p[i] + " ");
	}
}