func_code_string: #include <bits/stdc++.h>   using namespace std;   int N;   bool indegree[200010];   int a[200010];   bool visited[200010];   vector<pair<int, int> > ans;   int main() {     int i, j, k;     scanf( %d , &N);     for (i = (0); i < (N); i++) scanf( %d , a + i);     for (i = (0); i < (N); i++) a[i]--;     memset((visited), 0, sizeof(visited));     ;     memset((indegree), 0, sizeof(indegree));     ;     for (i = (0); i < (N); i++) indegree[a[i]] = true;     bool f = false;     for (i = (0); i < (N); i++) {       if (indegree[i]) continue;       f = true;       int x = i;       while (!visited[x]) {         visited[x] = true;         indegree[x] = true;         x = a[x];       }       ans.push_back(make_pair(i, x));     }     for (i = (0); i < (N); i++) {       if (visited[i]) continue;       int x = i;       while (!visited[x]) {         visited[x] = true;         x = a[x];       }       ans.push_back(make_pair(i, i));     }     if (!f && ans.size() < 2) {       printf( 0 n );       return 0;     }     ans.push_back(ans[0]);     printf( %d n , ans.size() - 1);     for (i = (0); i < (ans.size() - 1); i++)       printf( %d %d n , ans[i].second + 1, ans[i + 1].first + 1);     return 0;   }   