#include <bits/stdc++.h>
using namespace std;
bool cmp(long long int a, long long int b) {
  if (a > b) return true;
  return false;
}
long long int powr(int s, int p) {
  if (p == 0) return 1;
  if (p % 2 == 1) {
    long long int q = powr(s, p / 2);
    long long int a = q;
    q = (a * a);
    q = (q * s);
    return (q);
  } else {
    long long int q = powr(s, p / 2);
    long long int a = q;
    q = (a * a);
    return (q);
  }
}
vector<int> g[110];
int n, vis[110];
vector<int> s;
set<int> h;
void dfs(int i, int &count) {
  vis[i] = 1;
  ++count;
  for (int j = 0; j < g[i].size(); j++) {
    if (vis[g[i][j]] == 0) dfs(g[i][j], count);
  }
}
long long int _gcd(long long int a, long long int b) {
  if (a % b == 0) return b;
  return _gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  if (a < b) swap(a, b);
  long long int gc = _gcd(a, b);
  return (a * b) / gc;
}
int main() {
  int t = 1;
  while (t--) {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
      int c;
      scanf("%d", &c);
      g[i + 1].push_back(c);
      h.insert(c);
    }
    if (h.size() < n)
      cout << "-1\n";
    else {
      for (int i = 1; i < n + 1; i++) {
        if (vis[i] == 0) {
          int count = 0;
          dfs(i, count);
          s.push_back((count % 2 == 0 ? count / 2 : count));
        }
      }
      long long int ans = s[0];
      for (int i = 1; i < s.size(); i++) {
        ans = lcm(ans, s[i]);
      }
      cout << ans << '\n';
    }
  }
  return 0;
}
