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.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class fixTree {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] str = br.readLine().split(" ");
        int[] arr = new int[n+1];
        for(int i=0; i<n; i++){
            arr[i+1] = Integer.parseInt(str[i]);
        }
        int[] pp = new int[n+1];
        boolean[] parent = new boolean[n+1];
        boolean[] visited = new boolean[n+1];
        int p = -1;
        int x;
        for(int i=1; i<=n; i++){
            if(!visited[i]){
                x = i;
                pp[i] = i;
                while(!visited[x]){
                    visited[x] = true;
                    pp[x] = i;
                    if(pp[arr[x]]==i){
                        if(p==-1) p = x;
                        parent[x] = true;
                        break;
                    }
                    x = arr[x];
                }
            }
        }
        int cnt = 0;
        for(int i=1; i<=n; i++){
            if(arr[i]==i){
                p = i;
                break;
            }
        }
        for(int i=1; i<=n; i++){
            if(parent[i] && arr[i]!=p){
                arr[i] = p;
                cnt++;
            }
        }
        System.out.println(cnt);
        for(int i=1; i<=n; i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
}
