#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:134217728")
const long long MOD = 1000000007;
const int INF = 1000000000;
const int MAXN = 200005;
const double EPS = 1e-10;
const int HASH_POW = 7;
const double PI = acos(-1.0);
using namespace std;
void my_return(int code) { exit(code); }
int n;
int p[210], q[210];
long long gcd(long long a, long long b) {
  if (!b) return a;
  return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
int main() {
  mt19937 mt_rand(time(NULL));
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &p[i]);
    q[i] = p[i];
  }
  long long ans = 1;
  long long minlen = 1;
  for (int i = 1; i <= n; ++i) {
    int d[210];
    memset(d, -1, sizeof d);
    int v = i;
    d[v] = 0;
    while (true) {
      if (d[p[v]] == -1) {
        d[p[v]] = d[v] + 1;
        v = p[v];
      } else {
        minlen = max(minlen, (long long)d[p[v]]);
        ans = lcm(ans, d[v] - d[p[v]] + 1ll);
        break;
      }
    }
  }
  ans = (minlen + ans - 1) / ans * ans;
  printf("%I64d\n", ans);
  my_return(0);
}
