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 

# Why do we fall ? So we can learn to pick ourselves up.


root = -1

def find(i,time):
    parent[i] = time
    while not parent[aa[i]]:
        i = aa[i]
        parent[i] = time
        # print(parent,"in",i)
    if parent[aa[i]] == time:
        global root
        if root == -1:
            root = i
        if aa[i] != root:
            aa[i] = root
            global ans
            ans += 1




n = int(input())
aa = [0]+[int(i) for i in input().split()]

parent = [0]*(n+1)

ans = 0
time = 0

for i in range(1,n+1):
    if aa[i] == i:
        root = i
        break

for i in range(1,n+1):
    if not parent[i]:
        # print(i,"pp")
        time += 1
        find(i,time)
# print(parent)
print(ans)
print(*aa[1:])

