簡易解説

何回かユウキ君式のシャッフルをすることによってデッキを初期状態に戻せます。
つまり、制約を満たしつつ-1を出力するようなテストケ―スは存在しません。

最初に初期状態に戻るまでコンピューターにシャッフルさせる事を考えます。
この方法だと小さい制約だと2秒以下で計算できますが、この制約だと必要なシャッフル数が10810^8を超えるケースがいくつかあるのでTLEとなります。

次に、初期状態から何回シャッフルしたらデッキが初期状態に戻るのかを効率的に計算する方法を考えます。
それをするにあたって上からii番目のカード(初期状態ではii)は何回シャッフルするとまた上からii番目の位置に戻るか考えます。
これは鳩ノ巣原理によってNN回以下で戻ってくる事がわかります。また、ii番目の カードが初めて上からii番目に戻ってくるような回数Bi0Bi≧0を考えた時、BiBiの正の倍数回でもii番目に戻ってきます。 これには厳密でないな証明がいくつかありますが、数学的帰納法 を使って厳密に証明できます。

長さNNの数列B=[B1,B2,...,BN]B = [B1,B2, ... , BN]とした表した場合数列BBの全部の数値で割り切れる最小の数のシャッフルをした場合、すべてのカードは初期位置に戻ります。なのでこれをLCM(B1,B2,...,BN)LCM(B1, B2,..., BN)とした時、出力すべき答えは(M)mod(LCM(B1,B2,...,BN))(-M)mod(LCM(B1, B2,..., BN))となります。

上記の解説文だけでは「鳩ノ巣原理で最悪NN回で戻ってくるのをN回シミュレーションしたらO(N2)O(N^2)でTLEする可能性がある」と考えた方もいるかと思われますが、ii番目のカードがBiBiの倍数回で元の位置に戻るなら元に戻るまでに行った事のある位置に最初あったカードもBiBiの倍数回で元の位置に戻ります。 なので深さ優先探索をすることで数列B=[B1,B2,...,BN]B = [B1,B2, ... , BN]を求める部分はO(N)O(N)となり、十分高速です。 Pythonだとオーバーフローの考慮をしなくて良いですが、この数値は非常に大きなもの(最悪1010100100乗以上)になる可能性があるため他の言語だと注意が必要となります。

更なる証明と考え方

この問題をグラフ問題に帰結する事を考えます。
ユウキ君式シャッフルは数列A=[A1,A2,...,An]A = [A1,A2, ... , An] が与えられた時、これを頂点iiから頂点AiAiへと向かう辺として表すことによってシャッフルの言動を有向グラフで表すことができます。(具体的に言うと、頂点iiからxx回辺をたどって到達した点jjが初期状態からxx回シャッフルした場合の カードiiの位置になります。)

上記の用な有効グラフを作ったところで、制約に会った文の一つ「数列AAには11からNNの数字が各一回ずつ出現する」に注目します。
これはユウキ君式シャッフルを有効グラフとして表した場合:
・各頂点から出る辺は一つだけ
・各頂点へと向かう辺は一つだけ
と言う条件に言い換えられます。上記の条件から各カードは初期状態から1回以上シャッフルして元通りの位置に戻れること、また各カードは最小11枚、最大NN枚の カードの「組」の一枚として決まったシャッフルのされ方をする事を示します。

まず各カードは初期状態から1回以上シャッフルして元通りの位置に戻れることを示します。上記の有向グラフ的に言うと、これは 「全てのii(1iN1≦i≦N)について頂点iiを開始地点としたサイクルが存在する」事を証明すると同値です。

これを背理法によって証明します。
まず、「少なくとも一つのii(1iN1≦i≦N)について頂点iiを開始地点としたサイクルが存在しない」場合、二つの可能性が考えられます:
そもそもグラフに一つもサイクルがない
サイクルはあるが、頂点iiからたどり着く頂点jjから始まる頂点iiを含まないサイクルである
最初のケースが可能か考えます。頂点iiから始めた場合、前提の通りでkk個目の有向辺でiiが含まれるサイクルを作らないようにするためには 頂点が少なくともk+1k+1個必要です。問題の条件から有効辺はNN個存在するので、グラフにはN+1N+1個の頂点が必要となります。 したがって、最初のケースはあり得ません(サイクルが少なくとも一つは存在します)。

次のケースも
・各頂点から出る辺は一つだけ
・各頂点へと向かう辺は一つだけ
と言う前提と矛盾するため(頂点jjに向かってる辺が二つ以上存在するようになります)、背理法で「全てのii(1iN1≦i≦N)について頂点iiを開始地点としたサイクルが存在する」事が証明できました。 また、そのようなサイクルに入ってる「頂点の組」の集合[S1,...,Sk][S1, ..., Sk]を考えた場合、SiSiに入ってる各頂点はSiSiの要素数の倍数回にて元の位置に戻る事がわかります。

このようなサイクル達への分解は
・DFS
・Union-Find
のどちらでも可能です。相当定数倍高速化が上手い高速言語の使い手の方はO(N2)O(N^2)の方法でもギリギリ通せるかもしれません。

最後まで解説を読んでいただき、ありがとうございます。