#arc134b. [arc134_b]Reserve or Reverse
[arc134_b]Reserve or Reverse
问题陈述
给定长度为 的字符串 。用以下步骤将 转换为 Snuke:
- 选择一个偶数长度(不一定连续)的子序列 ,其中 表示 的第 个字符。
- 交换 和 。
- 交换 和 。
- 交换 和 。
- 交换 和 。
在过程结束后,找到 可能变成的按字典顺序最小的字符串。
什么是字典顺序?
简单来说,字典顺序是指单词在字典中的排列顺序。更正式地定义,这里是确定两个不同字符串 和 之间字典顺序的算法。
在下面,我们用 表示 的第 个字符。同时,如果 在字典顺序上小于 ,我们记为 ;如果 在字典顺序上大于 ,我们记为 。
- 我们设 为 和 长度的最小值。对于每个 ,我们检查 和 是否相等。
- 如果存在一个 使得 ,设 为最小的这样的 。然后,我们比较 和 。如果 在字母表中出现在 之前,我们确定 并停止;如果 在字母表中出现在 之后,我们确定 并停止。
- 如果不存在 使得 ,我们比较 和 的长度。如果 比 短,我们确定 并停止;如果 比 长,我们确定 并停止。
约束条件
- 是由小写英文字母组成的长度为 的字符串。
输入
输入以以下格式从标准输入给出:
输出
输出通过 Snuke 过程后得到的按字典顺序最小的可能字符串 。
示例输入 1
4
dcab
示例输出 1
acdb
- 当 时,过程只交换了 和 。
- 过程结束后, 变为
acdb
,这是可能的按字典顺序最小的结果。
示例输入 2
2
ab
示例输出 2
ab
- 当 时,过程结束后, 变为
ab
,这是可能的按字典顺序最小的结果。 - 注意, 的长度可以为 。
示例输入 3
16
cabaaabbbabcbaba
示例输出 3
aaaaaaabbbbcbbbc
示例输入 4
17
snwfpfwipeusiwkzo
示例输出 4
effwpnwipsusiwkzo