H - K-th Shifted Array

2 secs 1024 MB
uni_kakurenbo's icon uni_kakurenbo

マルチテストについての説明はこちら (サンプル問題を確認されていない方のみお読みください。)


配点:300300

問題文

長さ NN の整数列 A=(A1,A2,,AN)A = (A_1, A_2, \ldots, A_N) があります.

また,次の操作を 00 回以上何度でも行うことができます:

  • AA を左に 11 要素分だけ循環シフトする.すなわち列 AAAi=A(i+1)modN(1iN)A'_i = A_{(i + 1) \bmod N} \scriptsize \; (1 \leq i \leq N) によって定められる列 (A1,A2,,AN)(A'_1, A'_2, \ldots, A'_N) で置き換える.

AA に対して以上の操作を繰り返し行うことよって達成できる相異なる列であって辞書順で KK 番目に小さいものを求めてください.

  • なお,任意の長さ ll22 数列 x=(x1,x2,,xl)x = (x_1, x_2, \ldots, x_l)y=(y1,y2,,yl)y = (y_1, y_2, \ldots, y_l) とにおいて,以下がいずれも成り立つ:
    • xxyy とが異なる」とは『ある整数 i  (1il)i \; \scriptsize(1 \leq i \leq l) が存在して,xiyix_i \not= y_i である』ことに等しい.
    • xxyy より辞書順で小さい」とは『ある整数 i  (1il)i \; \scriptsize(1 \leq i \leq l) が存在して,任意の 1j<i1 \leq j < i なる整数 jj について xj=yjx_j = y_j であり,かつ xi<yix_i < y_i である』ことに等しい.

ここで,操作によって達成することのできる相異なる列は,必ず KK 個以上存在することを保証します.

制約

  • 1Φ1051 \leq \Phi \leq 10^5
  • 1KN1 \leq K \leq N
  • ϕΦϕ(N)105\sum_{\phi} \Phi_{\phi}(N) \leq 10^5
  • Ai<230(1iN)|A_i| < 2^{30} \scriptsize \; (1 \leq i \leq N)
  • 入力はすべて整数
  • AA に対して 00 回以上の操作を行うことによって得られる相異なる列は KK 個以上存在する.

入力

各テストケースの入力は,それぞれ以下の形式で与えられる:

NKN \enspace K
A1A2ANA_1 \enspace A_2 \enspace \ldots \enspace A_N

出力

答えとなる列を,要素ごとに空白もしくは改行で区切って出力せよ.

サンプル

入力例1
1
5 1
3 1 2 1 5
出力例1
1 2 1 5 3

ちょうど 11 回操作を行って得られる列 (1,2,1,5,3)(1, 2, 1, 5, 3) が辞書順で最小です.


入力例2
1
6 2
1 2 1 2 1 2
出力例2
2 1 2 1 2 1

操作によって得られる相異なる列は (1,2,1,2,1,2)(1, 2, 1, 2, 1, 2) もしくは (2,1,2,1,2,1)(2, 1, 2, 1, 2, 1)22 つのみです.
1,3,5,7,9,1, 3, 5, 7, 9, \ldots 回のうちいずれかの回数の操作を行ったとき,AA は,上記 22 つのうち辞書順で 22 番目に小さい列である (2,1,2,1,2,1)(2, 1, 2, 1, 2, 1) をとります.

提出


Go (1.21)