#TIMUS1024. 置换
置换
1024. 置换
时间限制: 2.0 秒
内存限制: 64 MB
背景
我们提醒一下,某个有限集合的置换是该集合到自身的一一映射。不太正式地说,这是一种重新排列集合元素的方式。例如,可以如下定义集合的一个置换:
这个记录定义了一个置换如下:,,,等等。
表达式的值是多少?很明显,。并且。人们可以很容易地看出,如果是一个置换,那么也是一个置换。在我们的例子中(请自行验证)
很自然地用表示这个置换。一般形式的定义如下:,。
在置换中有一个非常重要的置换——不移动任何元素的置换:
很明显,对于每个,以下关系成立:。以下不那么平凡的陈述是正确的(我们不会在这里证明,你可以顺便自己证明):
设是个元素集合的某个置换。那么存在一个正整数,使得。
使得的最小正整数称为置换的阶。
问题
你的程序应该解决的问题现在以非常简单的方式表述:"给定一个置换,求它的阶。"
输入
第一行包含唯一的整数(),即被这个置换重新排列的集合中的元素数量。第二行有个范围从1到的整数,用空格分隔,定义了一个置换——数字。
输出
你应该写出置换的阶。你可以认为答案不超过。
样例
输入
5
4 1 5 2 3
输出
6