问题 3818 --环啊环

3818: 环啊环★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 9  解决: 5
[提交][状态][命题人:]

题目描述

Tunder_Sun最近在玩一个新游戏,他会拿出n个点,每个点都有一条指出去的边(指向另一个点,另一个点有可能是自己),游戏规则是:如果你能找到一个最小的t,使得任意一个点x,在沿着指出去的边走过t次之后到达某一个点y,且点y在沿着指出去的边走过t次之后会回到点x,那么你就赢了;否则你就输了。

例如第一组样例:形成两个长度分别为31的环。


对于第一个环,当t为3时,能满足任意一个点x走t次能找到一个点y,使得从y走t次也能回到x;第二个环只需要走一次就会回到自己,所以最少走1次。因为第二个环走3次也是回到自己,所以t3

输入


多组数据输入,每组数据占两行。

第一行一个n1 n 100),代表总共有n个点。

第二行共n个数,a1, a2, a3, ... , an1 an n),ai代表第i个点指出去的边所指的点是ai

题目保证∑n小于1000


输出

如果能找到t,输出这个最小的t

      如果找不到这样的t,则输出-1

样例输入
Copy
4
2 3 1 4
4
4 4 4 4
样例输出
Copy
3
-1

提示

多个数的最小公倍数可以通过逐轮用2个数计算,将上一步的最小公倍数与下一个数继续计算,直到计算完所有数来得到。

来源

[提交][状态]