#include <bits/stdc++.h>
using namespace std;
const int inf = 0x7fffffff, mod = (int)1e9 + 7, dxy[] = {-1, 0, 1, 0, -1};
const long long INF = 1ll << 60;
const double pi = acos(-1), eps = 1e-6;
template <class T>
void rd(T &x) {
  x = 0;
  char c;
  while (c = getchar(), c < 48)
    ;
  do x = x * 10 + (c ^ 48);
  while (c = getchar(), c > 47);
}
template <class T>
void rec_pt(T x) {
  if (!x) return;
  rec_pt(x / 10);
  putchar(x % 10 ^ 48);
}
template <class T>
void pt(T x) {
  if (!x)
    putchar('0');
  else
    rec_pt(x);
}
template <class T>
inline void ptn(T x) {
  pt(x), putchar('\n');
}
template <class T>
inline void Max(T &a, T b) {
  if (b > a) a = b;
}
template <class T>
inline void Min(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
inline void mod_add(int &a, int b, int m = mod) {
  if ((a += b) >= m) a -= m;
}
inline void mod_minus(int &a, int b, int m = mod) {
  if ((a -= b) < 0) a += m;
}
int mod_pow(int a, int b, int m = mod) {
  int res = m == 1 ? 0 : 1;
  for (; b; b >>= 1, a = (long long)a * a % m)
    if (b & 1) res = (long long)res * a % m;
  return res;
}
inline long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
const int N = 105;
int nxt[N];
bool vis[N];
int calc(int u) {
  memset(vis, false, sizeof vis);
  for (int cnt = 1, tar = u;; ++cnt) {
    u = nxt[u];
    if (u == tar) return cnt;
    if (vis[u]) return -1;
    vis[u] = true;
  }
}
int main() {
  int n;
  rd(n);
  for (int i = (1), _t = (n + 1); i < _t; ++i) rd(nxt[i]);
  long long ans = 1;
  for (int i = (1), _t = (n + 1); i < _t; ++i) {
    int dist = calc(i);
    if (dist == -1) return puts("-1"), 0;
    if (dist & 1)
      ans = lcm(ans, dist);
    else
      ans = lcm(ans, dist >> 1);
  }
  ptn(ans);
  return 0;
}
