#include <bits/stdc++.h>
using namespace std;
int n, c[100], vis[100] = {0};
vector<int> cyc;
int GCD(int a, int b) {
  if (b == 0) return a;
  return GCD(b, a % b);
}
long long LCM(long long a, long long b) { return a * b / GCD(a, b); }
bool find_cyc(int v, int i, int len) {
  if (vis[v]) {
    len >>= 1 - (len & 1);
    cyc.push_back(len);
    return v == i;
  }
  vis[v] = 1;
  return find_cyc(c[v], i, len + 1);
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", c + i);
    c[i]--;
  }
  for (int i = 0; i < n; i++) {
    if (!vis[i]) {
      if (!find_cyc(i, i, 0)) {
        printf("-1\n");
        return 0;
      }
    }
  }
  long long ans = 1;
  for (auto x : cyc) {
    ans = LCM(ans, x);
  }
  cout << ans << '\n';
}
