#include <bits/stdc++.h>
int n, a[200009], f[200009], d[200009], tme = 0, root, chn = 0;
void dfs(int i) {
  f[i] = ++tme;
  if (!f[a[i]]) {
    dfs(a[i]);
  } else if (f[i] > f[a[i]] && !d[a[i]]) {
    if (!root) {
      root = i;
      a[i] = i;
      chn++;
    } else {
      a[i] = root;
      chn++;
    }
  } else if (a[i] == i) {
    a[i] = root;
    chn++;
  }
  d[i] = ++tme;
}
int main() {
  int i;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    if (a[i] == i && !root) {
      root = i;
      f[i] = ++tme;
      d[i] = ++tme;
    }
  }
  for (i = 1; i <= n; i++) {
    if (!f[i]) dfs(i);
  }
  printf("%d\n%d", chn, a[1]);
  for (i = 2; i <= n; i++) printf(" %d", a[i]);
  printf("\n");
  return 0;
}
