100 atcoder#ABC223B. [ABC223B] String Shifting

[ABC223B] String Shifting

题目描述

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

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

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

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

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

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

输入格式

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

S S

输出格式

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

题目大意

对于非空字符串,将第一个字符移到末尾的操作称为左移,将末尾字符移到开头的操作称为右移。请在将输入的字符串 ss 左移若干次和右移若干次的字符串中找到字典序最小和最大的字符串并依次输出。

aaba
aaab
baaa
z
z
z
abracadabra
aabracadabr
racadabraab

提示

制約

  • S S は英小文字からなる。
  • S S の長さは 1 1 以上 1000 1000 以下である。

Sample Explanation 1

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

Sample Explanation 2

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