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;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
import java.util.TreeMap;

/**
 * Hello world!
 *
 */
public class App {
    private static int[] roots;
    private static int[] parents;
    public static void main(String[] args) throws IOException {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
            String[] line;
            line = reader.readLine().split(" ");
            int n = Integer.parseInt(line[0]);
            roots = new int[n + 1];
            parents = new int[n + 1];
            int[] orgParent = new int[n + 1];
            line = reader.readLine().split(" ");
            int root = -1;
            for (int i = 0; i < line.length; ++i) {
                int u = i + 1;
                int v = Integer.parseInt(line[i]);
                orgParent[u] = v;
                if (find(u) != find(v)) {
                    parents[u] = v;
                    join(u, v);
                } else {
                    parents[u] = u;
                    root = u;
                }
            }
            int cnt = 0;
            for (int i = 1; i <= n; ++i) {
                if (parents[i] == i) {
                    parents[i] = root;
                }
                if (parents[i] != orgParent[i]) {
                    ++cnt;
                }
            }
            System.out.println(cnt);
            for (int i = 1; i <= n; ++i) {
                System.out.print(parents[i] + " ");
            }
        }
    }

    private static void join(int u, int v) {
        u = find(u);
        v = find(v);
        if (u != v) {
            roots[u] = v;
        }
    }

    private static int find(int u) {
        return roots[u] == u || roots[u] == 0 ? u : (roots[u] = find(roots[u]));
    }
}
