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 


//package graph;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int next[] = new int[n+1];
        
        for(int i=1;i<=n;i++){
            next[i]=sc.nextInt();
        }
        boolean vis[] = new boolean[n+1];
        int count=-1;
        for(int i=1;i<=n;i++){
            int x=i;
            if(vis[x])
              continue;  
            while(!vis[x]){
                vis[x]=true;
                x=next[x];
            }
            
            if(i==x||next[x]==x){
                count++;
                next[x]=x;
            }
        }
        
        if(count>1)
            count--;
        System.out.println(count);
        for(int i=1;i<=n;i++){
            if(next[i]==i){
                for(int j=i+1;j<=n;j++){
                    if(next[j]==j)
                        next[j]=i;
                }
                break;
            }
        }
        
        for(int i=1;i<=n;i++){
            System.out.print(next[i]+" ");
        
        }
    }
}
