atcoder#ARC157F. [ARC157F] XY Ladder LCS

[ARC157F] XY Ladder LCS

配点 : 900900

問題文

X, Y からなる長さ NN の文字列 S,TS, T が与えられます. 各 i=1,2,,Ni = 1, 2, \dots, N に関して,SSii 文字目と TTii 文字目を入れ替えるかどうかを自由に選べます. このとき,結果として得られる文字列の組はのべ 2N2^N 通りありますが,そのいずれかの共通部分列(連続とは限らない)となる文字列のうち最長のものを求めてください. ただし,そのような文字列が複数ある場合,そのうち辞書順で最初に現れるものを求めてください.

共通部分列とは 文字列 S部分列とは,S から 0 個以上の文字を削除して,残った文字を元の順で並べて得られる文字列のことをいいます. 文字列 S, T共通部分列とは,ST のどちらの部分列でもあるような文字列のことをいいます. (出力例 1 の説明も参考にしてください.)

制約

  • 1N501 \leq N \leq 50
  • S,TS, T はそれぞれ X, Y からなる長さ NN の文字列である.

入力

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

NN

SS

TT

出力

入れ替え後の文字列の組の共通部分列としてあり得る最長の文字列のうち,辞書順で最初に現れるものを出力せよ.

3
XXX
YYY
XY
  • どの文字も入れ替えない場合,XXXYYY の共通部分列は空文字列のみです.
  • 11 文字目だけを入れ替えた場合,YXXXYY の共通部分列は,空文字列, X, Y です.
  • 22 文字目だけを入れ替えた場合,XYXYXY の共通部分列は,空文字列, X, Y, XY, YX です.
  • 33 文字目だけを入れ替えた場合,XXYYYX の共通部分列は,空文字列, X, Y です.

22 文字以上の入れ替えは,SSTT 自体を入れ替えて考えれば上記のいずれかに該当します. したがって,共通部分列としてあり得る最長の文字列は XYYX であり,辞書順で最初に現れる XY が答えとなります.

1
X
Y

答えが空文字列となることもあります.

4
XXYX
YYYY
XYY

たとえば 22 文字目だけを入れ替えた場合に XYY が共通部分列となります. より長い文字列,あるいは,同じ長さであって辞書順でより早く現れる文字列は,どのように入れ替えたとしても共通部分列にはなり得ないため,これが答えとなります.