#arc134b. [arc134_b]Reserve or Reverse

[arc134_b]Reserve or Reverse

問題文

長さ NN の文字列 ss が与えられます。 ssii 文字目は sis_i と表します。

すぬけ君は以下の手順で ss を変化させます。

  • (1,2,ldots,N)(1,2, \\ldots, N) の長さが偶数の(連続するとは限らない)部分列 x=(x1,x2,ldots,x2k)x=(x_1, x_2, \\ldots, x_{2k}) を選ぶ(k=0k=0 でも構わない)。
  • sx1s_{x_1}sx2ks_{x_{2k}} を入れ替える。
  • sx2s_{x_2}sx2k1s_{x_{2k-1}} を入れ替える。
  • sx3s_{x_3}sx2k2s_{x_{2k-2}} を入れ替える。
  • vdots\\vdots
  • sxks_{x_{k}}sxk+1s_{x_{k+1}} を入れ替える。

すぬけ君が手順を終えたあとの ss としてありうる文字列のうち、辞書順最小のものを求めてください。

辞書順とは?

辞書順とは簡単に説明すると「単語が辞書に載っている順番」を意味します。より厳密な説明として、相異なる文字列 SS と文字列 TT の大小を判定するアルゴリズムを以下に説明します。

以下では「 SSii 文字目の文字」を SiS_i のように表します。また、 SSTT より辞書順で小さい場合は SltTS \\lt T 、大きい場合は SgtTS \\gt T と表します。

  1. SSTT のうち長さが短い方の文字列の長さを LL とします。i=1,2,dots,Li=1,2,\\dots,L に対して SiS_iTiT_i が一致するか調べます。
  2. SineqTiS_i \\neq T_i である ii が存在する場合、そのような ii のうち最小のものを jj とします。そして、SjS_jTjT_j を比較して、 SjS_j がアルファベット順で TjT_j より小さい場合は SltTS \\lt T 、大きい場合は SgtTS \\gt T と決定して、アルゴリズムを終了します。
  3. SineqTiS_i \\neq T_i である ii が存在しない場合、 SSTT の長さを比較して、SSTT より短い場合は SltTS \\lt T 、長い場合は SgtTS \\gt T と決定して、アルゴリズムを終了します。

制約

  • 1leqNleq2times1051 \\leq N \\leq 2 \\times 10^5
  • ss は長さ NN の英小文字のみからなる文字列

入力

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

NN ss

出力

すぬけ君が手順を終えたあとの ss としてありうる文字列のうち、辞書順最小のものを出力せよ。


入力例 1

4
dcab

出力例 1

acdb
  • x=(1,3)x=(1,3) のとき、s1s_{1}s3s_{3} のみが入れ替わります。
  • 手順を終えたあとの ssacdb となり辞書順最小です。

入力例 2

2
ab

出力例 2

ab
  • x=()x=() のとき、手順を終えたあとの ssab となり辞書順最小です。
  • xx の長さが 00 でもよいことに注意してください。

入力例 3

16
cabaaabbbabcbaba

出力例 3

aaaaaaabbbbcbbbc

入力例 4

17
snwfpfwipeusiwkzo

出力例 4

effwpnwipsusiwkzo