#P2369. Permutations

    ID: 1370 传统题 1000ms 256MiB 尝试: 12 已通过: 1 难度: 10 上传者: 标签>模拟数论Ural State University Internal Contest October'2000 Junior Session

Permutations

题目描述

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

![]( file://pVlePsta.png?type=additional_file)

这个定义确定了排列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))也是一个排列。在我们的例子中(请相信我们):

![](file://4P6fbECr.png?type=additional_file)

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

![](file://6g9st2Vb.png?type=additional_file)

显然,对于每一个k,都满足以下关系:(E_N)k=EN)ᵏ = E_N。下面这个不太容易理解的陈述是正确的(我们在此不证明,顺便说你可以自己尝试证明):设P(n)是一个N个元素集合的某个排列。那么存在一个自然数k,使得Pk=ENP^k = E_N。满足(E_N)k=EN)ᵏ = 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月内部竞赛,初级组