Byteasar 有一堆n 張牌想洗牌. 牌的位置從1 到 n編号. 一張在位置k的卡(1 <= k <= n) 下一次總是會到ak位置上. 我們定義bk 為Byteasar洗了l次牌後第k張牌的最終位置(初始時在位置k上的牌). 我們想知道初始的a序列。
Input
第一行有兩個整數n和 l (1 <= n, l <= 1000000).
接下來n行描述了序列(bk), 1 <= bk <= n.
Output
輸出n行每行一個整數描述序列(ak),
你可以假設資料保證肯定保證至少有一組解. 如有多解輸出任意一組即可.
Sample Input
5 2
1
2
5
3
4
Sample Output
or:
Hint
1 2 3 4 5 1 2 4 5 3
* =1 2 5 3 4
1 2 4 5 3 1 2 5 3 4
想象一個長度為L的循環,如果我們将這個循環求k次方,
我們将會得到Gcd(L,k)個長度為L/Gcd(L,k)的循環
那麼現在我們将b分解成循環,
假如現在我們得到了一個長度為L′的循環,
那麼由之前的結論可以得到L′=L/Gcd(L,k)
L=L'*Gcd(L,K)
于是對L'對待質因子分解,設某個質因子指數為a,它在K中的指數為b
則其在L中的指數x=a+min(x,b)
将x<b時,x=a+x,這明顯是不成立的
于是x>=b,x=a+b
例如L'=20,K=6
L'=2^2 *5,k=2*3
于是L=2^*(1+2) * 5 ^(1+0)=40
對于這個長度為40的置換,隻需要将L'所代表的那個置換(EN,分裂出來了兩個),交錯相連即可!
當L'=30時,算出來L=180,于是隻需要将L'所代表的那個置換(EN,分裂出來了180/30=6個)
則形成(a1b1c1d1e1f1a2.....f2a3........f3..........a30........b30)
————————————————