AT_abc370_c [ABC370C] Word Ladder
Description
[problemUrl]: https://atcoder.jp/contests/abc370/tasks/abc370_c
英小文字からなる文字列 $ S,\ T $ が与えられます。ここで、$ S $ と $ T $ の長さは等しいです。
$ X $ を空の配列とし、以下の操作を $ S $ と $ T $ が等しくなるまで繰り返します。
- $ S $ の文字を $ 1 $ 文字書き換え、$ X $ の末尾に $ S $ を追加する。
こうして得られる文字列の配列 $ X $ のうち要素数最小のものを求めてください。要素数最小のものが複数考えられる場合は、そのうち辞書順最小のものを求めてください。
文字列の配列の辞書順とは長さ $ N $ の文字列 $ S\ =\ S_1\ S_2\ \ldots\ S_N $ が長さ $ N $ の文字列 $ T\ =\ T_1\ T_2\ \ldots\ T_N $ より**辞書順で小さい**とは、ある整数 $ 1\ \leq\ i\ \leq\ N $ が存在して下記の $ 2 $ つがともに成り立つことをいいます。
- $ S_1\ S_2\ \ldots\ S_{i-1}\ =\ T_1\ T_2\ \ldots\ T_{i-1} $
- $ S_i $ が $ T_i $ よりアルファベット順で早い。
要素数 $ M $ の文字列の配列 $ X\ =\ (X_1,X_2,\ldots,X_M) $ が要素数 $ M $ の文字列の配列 $ Y\ =\ (Y_1,Y_2,\ldots,Y_M) $ より**辞書順で小さい**とは、ある整数 $ 1\ \leq\ j\ \leq\ M $ が存在して下記の $ 2 $ つがともに成り立つことをいいます。
- $ (X_1,X_2,\ldots,X_{j-1})\ =\ (Y_1,Y_2,\ldots,Y_{j-1}) $
- $ X_j $ が $ Y_j $ より辞書順で小さい。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ S $ $ T $
Output Format
答えの要素数を $ M $ として $ M\ +\ 1 $ 行出力せよ。
$ 1 $ 行目には $ M $ の値を出力せよ。
$ i\ +\ 1\ (1\ \leq\ i\ \leq\ M) $ 行目には答えの $ i $ 番目の要素を出力せよ。
Explanation/Hint
### 制約
- $ S,\ T $ は英小文字からなる長さ $ 1 $ 以上 $ 100 $ 以下の文字列
- $ S $ と $ T $ の長さは等しい
### Sample Explanation 1
はじめ、$ S\ = $ `adbe` です。 以下のように操作することで、$ X\ =\ ( $ `acbe` $ , $ `acbc` $ , $ `bcbc` $ ) $ とすることができます。 - $ S $ を `acbe` に書き換え、$ X $ の末尾に `acbe` を追加する。 - $ S $ を `acbc` に書き換え、$ X $ の末尾に `acbc` を追加する。 - $ S $ を `bcbc` に書き換え、$ X $ の末尾に `bcbc` を追加する。