#include <bits/stdc++.h>   using namespace std;   const int inf = 1e9 + 7;   const long long llinf = 1ll * inf * inf;   const double eps = 1e-12;   const int N = 1e5 + 10;   int f[N], h[N], g[N];   int main() {     int n;     scanf( %d , &n);     for (int i = 1; i <= int(n); ++i) scanf( %d , &f[i]);     map<int, vector<int> > uf;     for (int i = 1; i <= int(n); ++i) uf[f[i]].push_back(i);     int m = uf.size();     auto itr = uf.begin();     for (int x = 1; x <= m; ++x) {       h[x] = itr->first;       vector<int> nv = itr->second;       itr++;       for (int y : nv) g[y] = x;     }     int bad = 0;     for (int x = 1; x <= m; ++x)       if (g[h[x]] != x) bad = 1;     for (int x = 1; x <= n; ++x)       if (h[g[x]] != f[x]) bad = 1;     if (bad)       puts( -1 );     else {       printf( %d n , m);       for (int x = 1; x <= int(n); ++x) printf( %d%c , g[x], x == n ?   n  :    );       for (int x = 1; x <= int(m); ++x) printf( %d%c , h[x], x == m ?   n  :    );     }     return 0;   }   