func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 1e5 + 10;   int n;   int f[MAXN];   bool read() {     if (scanf( %d , &n) < 1) {       return 0;     }     for (int i = 0; i < int(n); ++i) {       scanf( %d , &f[i]);       --f[i];     }     return 1;   }   vector<int> inv_f[MAXN];   int g[MAXN];   int h[MAXN];   bool solve() {     for (int i = 0; i < int(n); ++i) {       inv_f[i].clear();     }     for (int i = 0; i < int(n); ++i) {       inv_f[f[i]].push_back(i);     }     memset(g, -1, sizeof g);     int m = 0;     for (int i = 0; i < int(n); ++i) {       if (inv_f[i].empty()) {         continue;       }       if (f[i] != i) {         return 0;       }       for (int j : inv_f[i]) {         g[j] = m;       }       h[m] = i;       ++m;     }     for (int x = 0; x < int(m); ++x) {       assert(g[h[x]] == x);     }     for (int x = 0; x < int(n); ++x) {       assert(h[g[x]] == f[x]);     }     printf( %d n , m);     for (int i = 0; i < int(n); ++i) {       printf( %d  , g[i] + 1);     }     puts(  );     for (int i = 0; i < int(m); ++i) {       printf( %d  , h[i] + 1);     }     puts(  );     return 1;   }   int main() {     while (read()) {       if (!solve()) {         puts( -1 );       }     }     return 0;   }   