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 

#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 200000;
int N, P[MAX_N + 5], V[MAX_N + 5], r, g, ans;
void dfs(int nw) {
  if (nw == r) return;
  if (V[nw] == g) {
    P[nw] = r;
    ans++;
    return;
  } else if (V[nw])
    return;
  V[nw] = g;
  dfs(P[nw]);
}
int main() {
  int i;
  scanf("%d", &N);
  for (i = 1; i <= N; i++) scanf("%d", P + i);
  for (i = 1; i <= N; i++)
    if (P[i] == i) r = i;
  for (i = 1; i <= N; i++) {
    ++g;
    dfs(i);
  }
  printf("%d\n", ans);
  for (i = 1; i <= N; i++) {
    if (!P[i]) {
      r = i;
      printf("%d ", r);
    } else
      printf("%d ", P[i]);
  }
  return 0;
}
