#include <bits/stdc++.h>
using namespace std;
int f[1000001], g[1000001];
int h[1000001], hcount;
int isUsed[1000001];
int isTrue;
int kinds;
int main() {
  int n;
  int t;
  while (scanf("%d", &n) != EOF) {
    memset(f, 0, sizeof(f));
    memset(g, 0, sizeof(g));
    memset(isUsed, 0, sizeof(isUsed));
    isTrue = 1;
    hcount = 0, kinds = 1;
    for (t = 1; t <= n; t++) {
      int in;
      scanf("%d", &in);
      if (in <= n && isTrue) {
        if (!isUsed[in]) {
          isUsed[in] = kinds++;
          g[t] = isUsed[in];
          f[t] = in;
          h[hcount++] = in;
        } else {
          g[t] = isUsed[in];
          f[t] = in;
        }
      } else {
      }
    }
    for (t = 0; t < hcount; t++) {
      if (!(h[t] == f[h[t]])) {
        isTrue = 0;
      }
    }
    if (isTrue) {
      printf("%d\n", hcount);
      for (t = 1; t <= n; t++) {
        printf("%d ", g[t]);
      }
      printf("\n");
      for (t = 0; t < hcount; t++) {
        printf("%d ", h[t]);
      }
      printf("\n");
    } else {
      printf("-1\n");
    }
  }
  return 0;
}
