const int MAXN=2e5+5;
namespace SA{
int sa[MAXN],x[MAXN],y[MAXN],c[MAXN];
void get_sa(char *s,int n,int m){//s下标从1开始
_rep(i,0,m)c[i]=0;
_rep(i,1,n)c[x[i]=s[i]]++;
_rep(i,1,m)c[i]+=c[i-1];
for(int i=n;i;i--)sa[c[x[i]]--]=i;
for(int k=1;k<n;k<<=1){
int pos=0;
_rep(i,n-k+1,n)y[++pos]=i;
_rep(i,1,n)if(sa[i]>k)y[++pos]=sa[i]-k;
_rep(i,0,m)c[i]=0;
_rep(i,1,n)c[x[i]]++;
_rep(i,1,m)c[i]+=c[i-1];
for(int i=n;i;i--)sa[c[x[y[i]]]--]=y[i],y[i]=0;
swap(x,y);
pos=0,y[n+1]=0;
_rep(i,1,n)x[sa[i]]=(y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k])?pos:++pos;
if(pos==n)break;
m=pos;
}
}
}
char buf[MAXN];
int main()
{
scanf("%s",buf+1);
int n=strlen(buf+1);
_rep(i,1,n)buf[i+n]=buf[i];
buf[2*n+1]='\0';
SA::get_sa(buf,n<<1,'z');
_rep(i,1,2*n){
if(SA::sa[i]<=n)
putchar(buf[SA::sa[i]+n-1]);
}
return 0;
}