#TIMUS1024. 置换

置换

1024. 置换

时间限制: 2.0 秒

内存限制: 64 MB

背景

我们提醒一下,某个有限集合的置换是该集合到自身的一一映射。不太正式地说,这是一种重新排列集合元素的方式。例如,可以如下定义集合{1,2,3,4,5}\{1,2,3,4,5\}的一个置换:

这个记录定义了一个置换PP如下:P(1)=4P(1) = 4P(2)=1P(2) = 1P(3)=5P(3) = 5,等等。

表达式P(P(1))P(P(1))的值是多少?很明显,P(P(1))=P(4)=2P(P(1)) = P(4) = 2。并且P(P(3))=P(5)=3P(P(3)) = P(5) = 3。人们可以很容易地看出,如果P(n)P(n)是一个置换,那么P(P(n))P(P(n))也是一个置换。在我们的例子中(请自行验证)

很自然地用P2(n)=P(P(n))P^2(n) = P(P(n))表示这个置换。一般形式的定义如下:P(n)=P1(n)P(n) = P^1(n)Pk(n)=P(Pk1(n))P^k(n) = P(P^{k-1}(n))

在置换中有一个非常重要的置换——不移动任何元素的置换:

很明显,对于每个kk,以下关系成立:(EN)k=EN(E_N)^k = E_N。以下不那么平凡的陈述是正确的(我们不会在这里证明,你可以顺便自己证明):

P(n)P(n)NN个元素集合的某个置换。那么存在一个正整数kk,使得Pk=ENP^k = E_N

使得Pk=ENP^k = E_N的最小正整数kk称为置换PP的阶。

问题

你的程序应该解决的问题现在以非常简单的方式表述:"给定一个置换,求它的阶。"

输入

第一行包含唯一的整数NN1N10001 \leq N \leq 1000),即被这个置换重新排列的集合中的元素数量。第二行有NN个范围从1到NN的整数,用空格分隔,定义了一个置换——数字P(1),P(2),,P(N)P(1), P(2), \ldots, P(N)

输出

你应该写出置换的阶。你可以认为答案不超过10910^9

样例

输入

5
4 1 5 2 3

输出

6