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 inf = 0x3f3f3f3f;
const int maxn = 200005;
int fa[maxn], N, in[maxn], vis[maxn];
void tuopu(int x) {
  while (!in[x]) {
    vis[x] = 1;
    x = fa[x];
    in[x]--;
    if (vis[x]) break;
  }
}
int fcir(int x) {
  while (!vis[x]) {
    vis[x] = 2;
    x = fa[x];
  }
  return x;
}
int main() {
  int fir = -1, ans = 0;
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) {
    scanf("%d", &fa[i]);
    in[fa[i]]++;
    if (i == fa[i]) {
      if (-1 != fir) {
        ans++;
        in[fa[i]]--;
        fa[i] = fir;
        in[fir]++;
      } else
        fir = fa[i];
    }
  }
  if (-1 == fir) {
    in[fa[1]]--;
    in[1]++;
    fa[1] = 1;
    ans++;
    fir = 1;
  }
  in[fir]--;
  for (int i = 1; i <= N; i++)
    if (!in[i] && !vis[i]) tuopu(i);
  for (int i = 1; i <= N; i++) {
    if (!vis[i]) {
      ans++;
      int x = fcir(i);
      fa[x] = fir;
    }
  }
  printf("%d\n", ans);
  for (int i = 1; i <= N; i++) printf("%d ", fa[i]);
  return 0;
}
