#include <bits/stdc++.h>
using namespace std;
const int maxn = 200000 + 23;
int n, F[maxn], num[maxn], vis[maxn], a[maxn], size;
bool mark;
int find(int k) { return (F[k] == k) ? (k) : (F[k] = find(F[k])); }
void unit(int x, int y) {
  int fx = find(x), fy = find(y);
  if (fx == fy)
    return;
  else
    F[fx] = fy;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), F[i] = i;
  for (int i = 1; i <= n; i++) unit(i, a[i]);
  size = 0;
  memset(vis, 0, sizeof(vis));
  for (int i = 1; i <= n; i++) {
    if (!vis[find(i)]) vis[find(i)] = ++size;
    num[i] = vis[find(i)];
  }
  mark = 1;
  memset(vis, 0, sizeof(vis));
  for (int i = 1; i <= n; i++) {
    if (vis[num[i]] == 0)
      vis[num[i]] = a[i];
    else {
      if (vis[num[i]] != a[i]) {
        mark = 0;
        break;
      }
    }
  }
  if (!mark)
    printf("%d\n", -1);
  else {
    printf("%d\n", size);
    for (int i = 1; i <= n; i++)
      printf("%d%c", num[i], (i == n) ? ('\n') : (' '));
    for (int i = 1; i <= size; i++)
      printf("%d%c", vis[i], (i == size) ? ('\n') : (' '));
  }
  return 0;
}
