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;
int a[200005];
int vis[200005];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n;
  while (cin >> n) {
    int cnt = 1;
    int rt = -1;
    int num = 0;
    memset(vis, 0, sizeof(vis));
    for (int i = (1); i <= (n); i++) {
      cin >> a[i];
      if (a[i] == i) rt = i;
    }
    for (int i = (1); i <= (n); i++) {
      int id = i;
      while (vis[id] == 0) {
        vis[id] = cnt;
        if (vis[a[id]] == cnt) {
          if (a[id] != rt) {
            a[id] = -1;
            num++;
            break;
          }
        }
        id = a[id];
      }
      cnt++;
    }
    printf("%d\n", num);
    for (int i = (1); i <= (n); i++) {
      if (a[i] == -1 && rt == -1) rt = i;
      if (a[i] != -1)
        printf("%d ", a[i]);
      else
        printf("%d ", rt);
    }
    printf("\n");
  }
  return 0;
}
