#arc134b. [arc134_b]Reserve or Reverse

[arc134_b]Reserve or Reverse

问题陈述

给定长度为 NN 的字符串 ss。用以下步骤将 ss 转换为 Snuke:

  • 选择一个偶数长度(不一定连续)的子序列 x=(x1,x2,,x2k)x=(x_1, x_2, \ldots, x_{2k}),其中 xix_i 表示 ss 的第 ii 个字符。
  • 交换 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 可能变成的按字典顺序最小的字符串。

什么是字典顺序?

简单来说,字典顺序是指单词在字典中的排列顺序。更正式地定义,这里是确定两个不同字符串 SSTT 之间字典顺序的算法。

在下面,我们用 SiS_i 表示 SS 的第 ii 个字符。同时,如果 SS 在字典顺序上小于 TT,我们记为 SltTS \\lt T;如果 SS 在字典顺序上大于 TT,我们记为 SgtTS \\gt T

  1. 我们设 LLSSTT 长度的最小值。对于每个 i=1,2,dots,Li=1,2,\\dots,L,我们检查 SiS_iTiT_i 是否相等。
  2. 如果存在一个 ii 使得 SineqTiS_i \\neq T_i,设 jj 为最小的这样的 ii。然后,我们比较 SjS_jTjT_j。如果 SjS_j 在字母表中出现在 TjT_j 之前,我们确定 SltTS \\lt T 并停止;如果 SjS_j 在字母表中出现在 TjT_j 之后,我们确定 SgtTS \\gt T 并停止。
  3. 如果不存在 ii 使得 SineqTiS_i \\neq T_i,我们比较 SSTT 的长度。如果 SSTT 短,我们确定 SltTS \\lt T 并停止;如果 SSTT 长,我们确定 SgtTS \\gt T 并停止。

约束条件

  • 1leqNleq2times1051 \\leq N \\leq 2 \\times 10^5
  • ss 是由小写英文字母组成的长度为 NN 的字符串。

输入

输入以以下格式从标准输入给出:

NN ss

输出

输出通过 Snuke 过程后得到的按字典顺序最小的可能字符串 ss

示例输入 1

4
dcab

示例输出 1

acdb
  • x=(1,3)x=(1,3) 时,过程只交换了 s1s_{1}s3s_{3}
  • 过程结束后,ss 变为 acdb,这是可能的按字典顺序最小的结果。

示例输入 2

2
ab

示例输出 2

ab
  • x=()x=() 时,过程结束后,ss 变为 ab,这是可能的按字典顺序最小的结果。
  • 注意,xx 的长度可以为 00

示例输入 3

16
cabaaabbbabcbaba

示例输出 3

aaaaaaabbbbcbbbc

示例输入 4

17
snwfpfwipeusiwkzo

示例输出 4

effwpnwipsusiwkzo