#P2369. Permutations
Permutations
题目描述
我们回顾一下,对于某个有限集合,其排列是该集合到自身的一一映射。通俗来讲,就是对集合中元素进行重新排序的一种方式。例如,可以对集合{1, 2, 3, 4, 5}定义如下排列: (此处原文档可能有关于排列的具体定义形式,但未给出,假设为:

这个定义确定了排列P,即P(1)=4,P(2)=1,P(3)=5等等。
表达式P(P(1))的值是多少呢?显然,P(P(1)) = P(4) = 2。同样,P(P(3)) = P(5) = 3。很容易看出,如果P(n)是一个排列,那么P(P(n))也是一个排列。在我们的例子中(请相信我们):

自然地,我们用P²(n) = P(P(n))来表示这个排列。一般形式的定义如下:P(n) = P¹(n),Pᵏ(n) = P(Pᵏ⁻¹(n)) 。在所有排列中,有一个非常重要的排列——它不会改变任何元素:

显然,对于每一个k,都满足以下关系:(E_N。下面这个不太容易理解的陈述是正确的(我们在此不证明,顺便说你可以自己尝试证明):设P(n)是一个N个元素集合的某个排列。那么存在一个自然数k,使得。满足(E_N的最小自然数k被称为排列P的阶。
现在,你的程序需要解决的问题表述起来非常简单:“给定一个排列,求其阶数”。
输入
在标准输入的第一行,包含一个自然数N(1 ≤ N ≤ 1000),它表示由该排列重新排序的集合中的元素个数。在第二行,有N个取值范围从1到N的自然数,用空格分隔,它们定义了一个排列——即数字P(1),P(2),…,P(N) 。
输出
你应该向标准输出写入一个自然数,即该排列的阶数。可以认为答案不会超过10⁹ 。
5
4 1 5 2 3
6
来源
乌拉尔国立大学2000年10月内部竞赛,初级组