#include <bits/stdc++.h>
#pragma comment(linker, "/stack:16777216")
using namespace std;
const int INF = 1000000000;
const int BASE = 1000000007;
const int MAX = 100007;
const int MAX2 = 7777;
const int MAXE = 100000;
const int ADD = 1000000;
const int MOD = 1000000007;
const int CNT = 800;
int main() {
  int n;
  cin >> n;
  vector<int> f(n);
  set<int> s;
  for (int i = (0); i < (n); i++) {
    scanf("%d", &f[i]);
    --f[i];
    if (f[i] == i) {
      s.insert(i);
    }
  }
  for (int i = (0); i < (n); i++) {
    if (s.find(f[i]) == s.end()) {
      cout << -1 << endl;
      return 0;
    }
  }
  int m = (int)s.size();
  map<int, int> M;
  vector<int> h;
  for (set<int>::iterator it = s.begin(); it != s.end(); ++it) {
    M[*it] = (int)h.size();
    h.push_back(*it);
  }
  vector<int> g;
  for (int i = (0); i < (n); i++) {
    g.push_back(M[f[i]]);
  }
  cout << m << endl;
  for (int i = (0); i < (n); i++) {
    printf("%d ", g[i] + 1);
  }
  cout << endl;
  for (int i = (0); i < (m); i++) {
    printf("%d ", h[i] + 1);
  }
  cout << endl;
  return 0;
}
