atcoder#ARC148B. [ARC148B] dp

[ARC148B] dp

配点 : 500500

問題文

dp からなる長さ LL の文字列 TT に対して、TT180180 度回転した文字列を f(T)f(T) と表します。より厳密には、f(T)f(T) を次の条件を満たす文字列として定めます。

  • f(T)f(T)dp からなる長さ LL の文字列である。
  • 1iL1 \leq i \leq L であるすべての整数 ii について、f(T)f(T)ii 文字目は TTL+1iL + 1 - i 文字目と異なる。

例えば T=T = ddddd のとき f(T)=f(T) = ppppp, T=T = dpdppp のとき f(T)=f(T)= dddpdp です。

dp からなる長さ NN の文字列 SS が与えられます。 あなたは次の操作を 0 回以上 1 回以下行うことができます。

  • 1LRN1 \leq L \leq R \leq N である整数の組 (L,R)(L, R)11 つ選び、SSLL 文字目から RR 文字目までからなる部分文字列を TT とする。そして、SSLL 文字目から RR 文字目までを f(T)f(T) に置き換える。

例えば S=S= dpdpp, (L,R)=(2,4)(L,R)=(2,4) の場合、T=T= pdp, f(T)=f(T)= dpd なので SSddpdp に変化します。

最終的な SS としてあり得る文字列のうち辞書順最小のものを出力してください。

辞書順とは?

文字列 S=S1S2SSS = S_1S_2\ldots S_{|S|} が文字列 T=T1T2TTT = T_1T_2\ldots T_{|T|} より辞書順で小さいとは、下記の 1. と 2. のどちらかが成り立つことを言います。 ここで、S,T|S|, |T| はそれぞれ S,TS, T の長さを表します。

  1. S<T|S| \lt |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 が存在して、下記の 22 つがともに成り立つ。
    • S1S2Si1=T1T2Ti1S_1S_2\ldots S_{i-1} = T_1T_2\ldots T_{i-1}
    • SiS_iTiT_i よりアルファベット順で小さい文字である。

制約

  • 1N50001 \leq N \leq 5000
  • SSdp からなる長さ NN の文字列
  • NN は整数

入力

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

NN

SS

出力

答えを出力せよ。

6
dpdppd
dddpdd

(L,R)=(2,5)(L, R) = (2, 5) とします。T=T = pdpp, f(T)=f(T) = ddpd なので、操作後の SSdddpdd になります。 得られる文字列のうち dddpdd が辞書順最小なので、これを出力します。

3
ddd
ddd

操作を行わないことが最適な場合もあります。

11
ddpdpdppddp
ddddpdpdddp