func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> s;   vector<vector<int> > t;   bool sortFunc(vector<int> a, vector<int> b) {     if (a.size() == 0) return false;     if (b.size() == 0) return true;     return a.size() < b.size();   }   int main() {     cin.sync_with_stdio(false);     cin.tie(0);     int n;     cin >> n;     s.resize(n + 1);     for (int i = 1; i <= n; i++) cin >> s[i];     vector<bool> was(n + 1, false);     int index = 0;     t.push_back(vector<int>());     for (int i = 1; i <= n; i++) {       if (was[i]) continue;       int ind = i;       while (!was[ind]) {         was[ind] = true;         t[index].push_back(ind);         ind = s[ind];       }       t.push_back(vector<int>());       index++;     }     vector<int> sol(n + 1);     sort(t.begin(), t.end(), sortFunc);     bool poss = true;     for (int i = 0; i < index; i++) {       vector<int> real;       if (t[i].size() % 2 == 1) {         real.resize(t[i].size());         for (int j = 0; j < t[i].size() / 2; j++) {           real[j * 2] = t[i][j];           int b = t[i].size() / 2 + 1 + j;           real[j * 2 + 1] = t[i][b];         }         int b = t[i].size() / 2;         real[t[i].size() - 1] = t[i][b];       } else if (t[i + 1].size() == t[i].size()) {         real.resize(2 * t[i].size());         for (int j = 0; j < t[i].size(); j++) {           real[2 * j] = t[i][j];           real[2 * j + 1] = t[i + 1][j];         }         i++;       } else         poss = false;       for (int j = 0; j < real.size(); j++) {         sol[real[j]] = real[(j + 1) % real.size()];       }     }     if (poss) {       for (int i = 1; i <= n; i++) {         cout << sol[i] <<    ;       }       cout <<   n ;     } else {       cout <<  -1 n ;     }   }   