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 FixATree { 
	static int[] arr1 = new int[200001];
	static int[] arr2 = new int[200001];
	static int find(int x){
		if(arr2[x]==x) return x;
		return arr2[x]=find(arr2[x]);
	}
	public static void main(String[] args) {
		int n,m,a,b;
		int ans=0;
		Scanner in=new Scanner(System.in);
		n=in.nextInt();
		m=-1;
		for(int i=1;i<=n;i++)
			arr1[i]=in.nextInt();
		for(int i=1;i<=n;i++) 
			arr2[i]=i;
		for(int i=1;i<=n;i++){
			a=find(i);
			b=find(arr1[i]);
			if(a!=b) 
				arr2[a]=b;
			if(m<0&&arr1[i]==i) 
				m=i;
		}
		if(m<0){
			for(int i=1;i<=n;i++)
				if(arr2[i]==i) { 
					m=i;
					break;
				}
		}
		for(int i=1;i<=n;i++){
			if(arr2[i]==i&&arr1[i]!=m){
				arr1[i]=m;
			 	ans++;
			}
		}
		System.out.println(ans);
		for(int i=1;i<=n;i++)
			System.out.print(arr1[i]+" ");
	}
}
