#include <iostream>
using namespace std;
int main() {
string s;
cin >> s;
int n = s.length();
char min = -1;
/*for (int i=0; i<n; ++i)
if (min == -1 || s[i] < min) min = s[i];*/
int level = 0;
int left = n;
int arr[n];
for(int i=0; i<n; ++i)
arr[i] = i;
int arr_it = 0;
while (left > 1 && level<(n+1)/2) {
min = -1;
arr_it = 0;
for (int i=0; i<left; ++i) {
if (min == -1 || s[(arr[i]+level) % n] < min) {
min = s[(arr[i]+level) % n];
}
}
for (int i=0; i<left; ++i) {
if (s[(arr[i]+level) % n] == min) {
arr[arr_it] = arr[i];
++arr_it;
}
}
// Special case:
if (level==0 && arr_it > (left+1)/2) {
int curr_i=-1;
int curr_c=0;
int max_s=0;
int max_si=-1;
for (int i=0; i<left; ++i) {
if (s[i] == min) {
++curr_c;
if (curr_i == -1) curr_i = i;
if (curr_c > max_s) {
max_s = curr_c;
max_si = curr_i;
}
} else {
curr_c = 0;
curr_i = -1;
}
}
int spref = 0; int ssuff = 0;
int i=0;
while (true) {
if (s[i] == min) ++spref;
else break;
++i;
}
i=left-1;
while (true) {
if (s[i] == min) ++ssuff;
else break;
--i;
}
++i;
if (spref + ssuff > max_s)
cout << s.substr(i, n-i) << s.substr(0,i) << "\n";
else
cout << s.substr(max_si, n-max_si) << s.substr(0,max_si) << "\n";
return 0;
}
//if (left > 5 && arr_it > (left+1)/2) { // TODO: around! e.g. 'aabbaaabbaa'
/*int maxs = 0;
int maxsind = -1;
int scount = 0;
int currind = -1;
for (int j=0; j<left; ++j) {
if (s[(arr[j]+level) % n] == min) {
++scount;
if (scount > maxs) {
if (currind == -1) currind = j;
maxs = scount;
maxsind = currind;
}
} else {
scount = 0;
currind = -1;
}
}
cout << level << " " << maxsind << "\n";*/
/*int pref = 0;
int suff = 0;
int j=0;
int suffind = -1;
while (true) {
if (s[(arr[j] + level) % n] == min)
++pref;
else break;
++j;
if (j >= left) break;
}
j = left-1;
while (true) {
cout << "::" << j << " " << arr[j] << " " << s[(arr[j] + level) % n] << "\n";
if (s[(arr[j] + level) % n] == min)
++suff;
else {
cout << "!!!\n";
suffind = j+1;
break;
}
--j;
if (j<0) break;
}
if (pref+suff > maxs) {
cout << "! " << suffind << " " << arr[suffind] << "\n";
cout << s.substr(arr[suffind], n-arr[suffind]) << s.substr(0,arr[suffind]) << "\n";
}
else*/
/*
cout << s.substr(arr[maxsind], n-arr[maxsind]) << s.substr(0,arr[maxsind]) << "\n";
return 0;
}*/
left = arr_it;
++level;
}
/*cout << arr[0] << "\n";
for (int i=0;i<n;++i)
cout << arr[i] << " ";
cout << "\n";*/
/*for (int i=0; i<n; ++i)
cout << s[(arr[0] + i) % n];
cout << "\n";*/
cout << s.substr(arr[0], n-arr[0]) << s.substr(0,arr[0]) << "\n";
}