#include <bits/stdc++.h>
using namespace std;
const int MAXN = 110;
int n;
int c[MAXN];
int used[MAXN];
vector<int> z;
int start;
int NOD(int a, int b) {
  if (a > b) {
    return NOD(b, a);
  }
  if (a == 0) {
    return b;
  }
  if (a == 1) {
    return 1;
  }
  return NOD(b % a, a);
}
int NOK(int a, int b) { return a * b / NOD(a, b); }
void dfs(int s, int cnt) {
  if (used[s] == 0) {
    used[s] = 1;
    dfs(c[s], cnt + 1);
    used[s] = 2;
  } else if (used[s] == 2) {
    cout << -1 << endl;
    exit(0);
  } else if (used[s] == 1) {
    if (s == start) {
      used[s] = 2;
      if (cnt % 2 == 0) {
        z.push_back(cnt / 2);
      } else {
        z.push_back(cnt);
      }
    } else {
      cout << -1 << endl;
      exit(0);
    }
  }
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    scanf("%d", c + i);
  }
  for (int i = 1; i <= n; i++) {
    if (used[i] == 0) {
      start = i;
      dfs(i, 0);
    }
  }
  int ans = 1;
  for (int i = 0; i < z.size(); i++) {
    ans = NOK(ans, z[i]);
  }
  cout << ans << endl;
  return 0;
}
