100 atcoder#ABC223B. [ABC223B] String Shifting

[ABC223B] String Shifting

配点 : 200200

問題文

空でない文字列に対し、先頭の文字を末尾に移動する操作を左シフト、末尾の文字を先頭に移動する操作を右シフトと呼びます。

例えば、abcde に対して左シフトを 11 回行うと bcdea となり、右シフトを 22 回行うと deabc となります。

英小文字からなる空でない文字列 SS が与えられます。SS に対し左シフトと右シフトをそれぞれ好きな回数(00 回でもよい)行って得られる文字列のうち、辞書順で最小のものと最大のものを求めてください。

辞書順とは?

辞書順とは簡単に説明すると「単語が辞書に載っている順番」を意味します。より厳密な説明として、英小文字からなる相異なる文字列 S,TS, T の大小を判定するアルゴリズムを以下に説明します。

以下では「 SSii 文字目の文字」を SiS_i のように表します。また、 SSTT より辞書順で小さい場合は S<TS \lt T 、大きい場合は S>TS \gt T と表します。

  1. S,TS, T のうち長さが大きくない方の文字列の長さを LL とします。i=1,2,,Li=1,2,\dots,L に対して SiS_iTiT_i が一致するか調べます。
  2. SiTiS_i \neq T_i である ii が存在する場合、そのような ii のうち最小のものを jj とします。そして、SjS_jTjT_j を比較して、SjS_jTjT_j よりアルファベット順で小さい場合は S<TS \lt T 、そうでない場合は S>TS \gt T と決定して、アルゴリズムを終了します。
  3. SiTiS_i \neq T_i である ii が存在しない場合、SSTT の長さを比較して、SSTT より短い場合は S<TS \lt T 、長い場合は S>TS \gt T と決定して、アルゴリズムを終了します。

制約

  • SS は英小文字からなる。
  • SS の長さは 11 以上 10001000 以下である。

入力

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

SS

出力

22 行にわたって出力せよ。SS に対し左シフトと右シフトをそれぞれ好きな回数(00 回でもよい)行って得られる文字列のうち、辞書順で最小のものと最大のものをそれぞれ Smin,SmaxS_{\min}, S_{\max} とおいたとき、11 行目には SminS_{\min} を、22 行目には SmaxS_{\max} を出力せよ。

aaba
aaab
baaa

操作によって、aaab ,, aaba ,, abaa ,, baaa44 通りの文字列を得ることができます。 これらのうち辞書順で最小、最大のものはそれぞれ aaab ,, baaa です。

z
z
z

どのように操作を行っても、得られる文字列は z のみです。

abracadabra
aabracadabr
racadabraab