#P1008. [2024 校赛] 等等...这是DP对吧

[2024 校赛] 等等...这是DP对吧

题目描述

本题题解已发表至 讨论区

对于一个由 dp 组成、长度为 LL 的字符串 TT,定义 f(T)f(T) 为将 TT 旋转 180180^\circ 后得到的字符串。更正式地说,f(T)f(T) 满足以下条件:

  • f(T)f(T) 是一个由 dp 组成、长度为 LL 的字符串;

  • 对于所有满足 1iL1 \leq i \leq L 的整数 iif(T)f(T) 的第 ii 个字符与 TT 的第 (L+1i)(L + 1 - i) 个字符不同。

例如,当 T=‘ddddd‘T = \text{`ddddd`} 时,f(T)=‘ppppp‘f(T) = \text{`ppppp`};当 T=‘dpdppp‘T = \text{`dpdppp`} 时,f(T)=‘dddpdp‘f(T) = \text{`dddpdp`}

现在,给定一个由 dp 组成、长度为 NN 的字符串 SS,你可以执行以下操作零次或一次:

  • 选择一对整数 (L,R)(L, R),满足 1LRN1 \leq L \leq R \leq N,令 TTSS 的第 LL 到第 RR 个字符组成的子串,然后用 f(T)f(T) 替换 SS 的第 LL 到第 RR 个字符。

例如,当 S=‘dpdpp‘S = \text{`dpdpp`}(L,R)=(2,4)(L, R) = (2, 4) 时,T=‘pdp‘T = \text{`pdp`}f(T)=‘dpd‘f(T) = \text{`dpd`},此时 SS 变为 ‘ddpdp‘\text{`ddpdp`}

你的任务是输出 SS 可能得到的字典序最小的字符串。


什么是字典序?

一个字符串 S=S1S2SSS = S_1S_2\ldots S_{|S|} 被称为字典序小于另一个字符串 T=T1T2TTT = T_1T_2\ldots T_{|T|},当且仅当以下两个条件之一成立(其中 S|S|T|T| 表示字符串的长度):

1. S<T|S| < |T|S1S2SS=T1T2TSS_1S_2\ldots S_{|S|} = T_1T_2\ldots T_{|S|}

2. 存在一个整数 1imin{S,T}1 \leq i \leq \min\lbrace |S|, |T| \rbrace,使得以下两个条件同时成立:

  • S1S2Si1=T1T2Ti1S_1S_2\ldots S_{i-1} = T_1T_2\ldots T_{i-1}
  • SiS_i 在字母顺序上小于 TiT_i

输入描述

1N50001 \leq N \leq 5000

SS 是一个长度为 NN 且仅由字符 `d` 和 `p` 组成的字符串。

NN 是一个整数。

输出描述

输出能够得到的字典序最小的字符串。

示例 1

输入

6
dpdppd

输出

dddpdd

说明

(L,R)=(2,5)(L, R) = (2, 5)。此时有 T=‘pdpp‘T = \text{`pdpp`}f(T)=‘ddpd‘f(T) = \text{`ddpd`},因此 SS 变为 ‘dddpdd‘\text{`dddpdd`}

这是可以得到的字典序最小的字符串,因此输出它。

示例 2

输入

3
ddd

输出

ddd

说明

不进行任何操作即是字典序最小的字符串。

示例 3

输入

11
ddpdpdppddp

输出

ddddpdpdddp