func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 100005;   const int inf = 0x3f3f3f3f;   int n, e[2][maxn], tot, rd[maxn];   int net[maxn], tail[maxn];   inline int read(void) {     int num, sign = 1;     char c;     while (!isdigit(c = getchar()))       if (c ==  - ) sign = 0;     num = c -  0 ;     while (isdigit(c = getchar())) num = (num << 1) + (num << 3) + c -  0 ;     return sign ? num : -num;   }   int dfs(int u) {     tail[u] = u;     if (!tail[net[u]]) return tail[u] = dfs(net[u]);     return tail[u];   }   signed main(void) {     n = read();     for (register int i = 1; i <= n; ++i) net[i] = read(), ++rd[net[i]];     for (register int i = 1; i <= n; ++i)       if (!rd[i]) {         e[0][++tot] = i;         e[1][tot] = dfs(i);       }     int ft = tot;     for (register int i = 1; i <= n; ++i)       if (!tail[i]) {         e[0][++tot] = i;         e[1][tot] = dfs(i);       }     if (tot == 1 && !ft) tot = 0;     printf( %d n , tot);     for (register int i = 1; i <= tot; ++i)       printf( %d %d n , e[1][i], e[0][i % tot + 1]);     return 0;   }   