atcoder#ARC134B. [ARC134B] Reserve or Reverse

[ARC134B] Reserve or Reverse

题目描述

長さ N N の文字列 s s が与えられます。 s s i i 文字目は si s_i と表します。

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

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

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

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

以下では「 S S i i 文字目の文字」を Si S_i のように表します。また、 S S T T より辞書順で小さい場合は S < T S\ \lt\ T 、大きい場合は S > T S\ \gt\ T と表します。

  1. S S T T のうち長さが短い方の文字列の長さを L L とします。i=1,2,,L i=1,2,\dots,L に対して Si S_i Ti T_i が一致するか調べます。
  2. Si  Ti S_i\ \neq\ T_i である i i が存在する場合、そのような i i のうち最小のものを j j とします。そして、Sj S_j Tj T_j を比較して、 Sj S_j がアルファベット順で Tj T_j より小さい場合は S < T S\ \lt\ T 、大きい場合は S > T S\ \gt\ T と決定して、アルゴリズムを終了します。
  3. Si  Ti S_i\ \neq\ T_i である i i が存在しない場合、 S S T T の長さを比較して、S S T T より短い場合は S < T S\ \lt\ T 、長い場合は S > T S\ \gt\ T と決定して、アルゴリズムを終了します。

输入格式

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

N N s s

输出格式

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

4
dcab
acdb
2
ab
ab
16
cabaaabbbabcbaba
aaaaaaabbbbcbbbc
17
snwfpfwipeusiwkzo
effwpnwipsusiwkzo

提示

制約

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

Sample Explanation 1

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

Sample Explanation 2

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