atcoder#ARC112E. [ARC112E] Cigar Box
[ARC112E] Cigar Box
配点 : 点
問題文
数列 に対して、以下の操作をちょうど 回繰り返したところ、 になりました。
- 項を つ選んで消す。その後、消した項を数列の先頭か末尾に付け加える。
回の操作列としてありうるものの数を で割ったあまりを求めてください。
ただし、 つの操作列が同じであるとは、「どの操作についても、選んだ項と付け加えた位置がどちらも等しいこと」とします。
制約
- は の順列
入力
入力は以下の形式で標準入力から与えられる。
出力
操作列としてありうるものの数を で割ったあまりを出力せよ。
5 2
1 2 4 5 3
5
以下の 通りの操作列がありえます。
- を消して先頭に付け加える。数列は となる。その後、 を消して末尾に付け加える。数列は となる。
- を消して先頭に付け加える。数列は となる。その後、 を消して末尾に付け加える。数列は となる。
- を消して末尾に付け加える。数列は となる。その後、 を消して先頭に付け加える。数列は となる。
- を消して末尾に付け加える。数列は となる。その後、 を消して末尾に付け加える。数列は となる。
- を消して末尾に付け加える。数列は となる。その後、 を消して末尾に付け加える。数列は となる。
2 16
1 2
150994942
種類の操作のうち、 種類では数列が全く変わらず、もう 種類では 項が入れ替わります。 このことから、全ての操作列のうち半分である が求める操作列の数であることが示せます。 よって、 を で割ったあまりである が答えです。
10 3000
3 7 10 1 9 5 4 8 6 2
129989699