func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 1000000007;   const int inf = 1001001001;   const long long PRED = 2500000000;   int n, a[111111], used[111111], ans, k;   vector<int> v[111111], b[111111];   int main() {     cin >> n;     for (int i = 1; i <= n; i++) {       scanf( %d , &a[i]);       if (a[i] == i) ans = i;     }     for (int i = 1; i <= n; i++) {       if (used[i] == 0) {         int poz = i;         int f = 0;         while (poz != i || f == 0) {           f = 1;           used[poz] = 1;           v[k].push_back(a[poz]);           poz = a[poz];         }         b[v[k].size()].push_back(k);         k++;       }     }     if (b[1].size()) {       printf( YES n );       for (int i = 1; i <= n; i++) {         if (i != ans) printf( %d %d n , a[ans], a[i]);       }       return 0;     }     if (b[2].size()) {       for (int i = 0; i < k; i++) {         if (v[i].size() % 2 == 1) {           cout <<  NO ;           return 0;         }       }       int q = b[2][0];       printf( YES n%d %d n , v[q][0], v[q][1]);       for (int i = 0; i < k; i++) {         if (i != q) {           for (int j = 0; j < v[i].size(); j++) {             if (j % 2 == 0)               printf( %d %d n , v[q][0], v[i][j]);             else               printf( %d %d n , v[q][1], v[i][j]);           }         }       }       return 0;     }     cout <<  NO ;     return 0;   }   