/*
TASK: names
LANG: C++
*/

#include <iostream>
#include <cstdio>
#include <fstream>
#include <vector>
#include <cstdlib>
#define MAX 1024
#define in cin
#define out cout


using namespace std;
//ifstream in; ofstream out;

int n, m;
string best, str;



void dowork(void)
{
int i, c, j;
int flag;
int flag1, flag2, flag3;
string p1, p2, p3, cur;

best = str; n = str.size();

for (i=1; i<n; i++)
    {
    flag = 1;
    for (c=0; c<n; c++) if (best[c] != str[(i+c)%n]) 
        {
        if (best[c] < str[(i+c)%n]) flag = 0;
        break;
        }
    
    if (flag) {best = ""; for (c=0; c<n; c++) best += str[(i+c)%n];}
    }

p1 = ""; p2 = ""; p3 = "";

flag1 = 1; p1 = "";
for (i=1; i<n-1; i++)
    {
    p1 += str[i-1];
    if (flag1 == 1) if (best[c] != p1[c])
       {
       if (p1[i-1] > best[i-1]) flag1 = 0;
       if (p1[i-1] < best[i-1]) flag1 = 42;
       }
    
    flag2 = 1; p2 = "";
    for (c=i+1; c<n; c++)
        {
        p2 += str[c-1]; 
        if (flag2 == 1) 
           {
           if (p2[c-i-1] > best[c-i-1]) flag2 = 0;
           else if (p2[c-i-1] < best[c-i-1]) flag2 = 42;
           }
        
        flag3 = 1; p3 = "";
        for (j=c; j<n; j++) 
            {
            p3 += str[j];
            if (flag3 == 1) 
               {
               if (p3[j-c] > best[j-c]) flag3 = 0;
               if (p3[j-c] < best[j-c]) flag3 = 42;
               }
            }
        
        if (flag1 != 0) {cur = p1 + p3 + p2; if (best > cur) best = cur;}
        if (flag3 != 0) {cur = p3 + p1 + p2; if (best > cur) best = cur;}
        if (flag2 != 0)
           {
           cur = p2 + p1 + p3; if (best > cur) best = cur;
           cur = p2 + p3 + p1; if (best > cur) best = cur;
           }
        }
    }

return;
}


int main(void)
{

//in.open("names.in"); out.open("names.out");

while(42)
{
str = ""; in >> str;
if (str.size() == 0) break;

dowork();
out << best << endl;
}

return 0;
}
