#include <bits/stdc++.h>
using namespace std;
struct node {
  vector<int> C;
  bool v;
};
node V[110];
long long int res = 1LL;
long long int gcd(long long int a, long long int b) {
  if (a == 0) {
    return b;
  }
  return gcd(b % a, a);
}
void dfs(int c, int d) {
  if (V[c].v == 1) {
    res = res * d / (long long int)gcd(res, d);
    return;
  }
  V[c].v = 1;
  for (int i = 0; i < V[c].C.size(); i++) {
    dfs(V[c].C[i], d + 1);
  }
}
int main() {
  int n, i, x;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d", &x);
    V[x].C.push_back(i);
  }
  for (i = 1; i <= n; i++) {
    if (V[i].C.size() == 0) {
      printf("-1");
      return 0;
    }
  }
  for (i = 1; i <= n; i++) {
    if (!V[i].v) {
      dfs(i, 0);
    }
  }
  if (res % 2LL == 0LL) {
    printf("%I64d", res / 2LL);
  } else {
    printf("%I64d", res);
  }
}
