#abc276c. [abc276_c]Previous Permutation

[abc276_c]Previous Permutation

問題文

(1,dots,N)(1, \\dots, N) の順列 P=(P1,dots,PN)P = (P_1, \\dots, P_N) が与えられます。ただし、(P1,dots,PN)neq(1,dots,N)(P_1, \\dots, P_N) \\neq (1, \\dots, N) です。

(1dots,N)(1 \\dots, N) の順列を全て辞書順で小さい順に並べたとき、PPKK 番目であるとします。辞書順で小さい方から K1K-1 番目の順列を求めてください。

順列とは?

(1,dots,N)(1, \\dots, N)順列とは、(1,dots,N)(1, \\dots, N) を並べ替えて得られる数列のことをいいます。

辞書順とは?

長さ NN の数列 A=(A1,dots,AN),B=(B1,dots,BN)A = (A_1, \\dots, A_N), B = (B_1, \\dots, B_N) に対し、AABB より辞書順で真に小さいとは、ある整数 1leqileqN1 \\leq i \\leq N が存在して、下記の 22 つがともに成り立つことをいいます。

  • (A1,ldots,Ai1)=(B1,ldots,Bi1)(A_{1},\\ldots,A_{i-1}) = (B_1,\\ldots,B_{i-1})
  • Ai<BiA_i < B_i

制約

  • 2leqNleq1002 \\leq N \\leq 100
  • 1leqPileqN,(1leqileqN)1 \\leq P_i \\leq N \\, (1 \\leq i \\leq N)
  • PineqPj,(ineqj)P_i \\neq P_j \\, (i \\neq j)
  • (P1,dots,PN)neq(1,dots,N)(P_1, \\dots, P_N) \\neq (1, \\dots, N)
  • 入力される値は全て整数

入力

入力は以下の形式で標準入力から与えられる。

NN P1P_1 ldots\\ldots PNP_N

出力

求める順列を Q=(Q1,dots,QN)Q = (Q_1, \\dots, Q_N) として、Q1,dots,QNQ_1, \\dots, Q_N をこの順に空白区切りで一行に出力せよ。


入力例 1

3
3 1 2

出力例 1

2 3 1

(1,2,3)(1, 2, 3) の順列を辞書順で小さい順に並べると次のようになります。

  • (1,2,3)(1, 2, 3)
  • (1,3,2)(1, 3, 2)
  • (2,1,3)(2, 1, 3)
  • (2,3,1)(2, 3, 1)
  • (3,1,2)(3, 1, 2)
  • (3,2,1)(3, 2, 1)

よって P=(3,1,2)P = (3, 1, 2) は小さい方から 55 番目であり、求める順列、すなわち小さい方から 51=45 - 1 = 4 番目の順列は (2,3,1)(2, 3, 1) です。


入力例 2

10
9 8 6 5 10 3 1 2 4 7

出力例 2

9 8 6 5 10 2 7 4 3 1