func_code_string: #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;   }   