#include <bits/stdc++.h>
using namespace std;
int n, in[200005], a[200005], sta[200005], top, now, root, ans, flag;
bool vis[200005], mark[200005];
int read() {
  int x, f = 1;
  char ch;
  while (!(isdigit(ch = getchar()))) ch == '-' ? f = -1 : f;
  x = ch - 48;
  while ((isdigit(ch = getchar()))) x = x * 10 + ch - 48;
  return f * x;
}
void Topology() {
  while (now < top) {
    now++;
    int tmp = sta[now];
    vis[tmp] = 1;
    in[a[tmp]]--;
    if (!in[a[tmp]]) sta[++top] = a[tmp];
  }
}
void dfs(int u) {
  vis[u] = 1;
  if (!vis[a[u]]) dfs(a[u]);
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) {
    a[i] = read();
    in[a[i]]++;
    if (a[i] == i) {
      flag = 1;
      root = i;
    }
  }
  for (int i = 1; i <= n; i++)
    if (!in[i]) sta[++top] = i;
  Topology();
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) {
      if (!root) root = i;
      ans++;
      dfs(a[i]);
      a[i] = root;
      mark[i] = 1;
    }
  }
  printf("%d\n", ans - flag);
  for (int i = 1; i <= n; i++) {
    if (mark[i]) a[i] = root;
    printf("%d ", a[i]);
  }
  return 0;
}
