/*
TASK:names
LANG:C++
*/
#include<stdio.h>
#include<queue>
using namespace std;
queue<int>q;

int x,y,n,z,size,grr[200000],start,count,best;
char masiv[200000];
char masiv2[200000],mini;

int main()
{
while(1)
{
x=0;y=0;n=0,size=0,start=0,count=0,best=0;
scanf("%c",&masiv[0]);
x=0;
while(masiv[x]>='a'&&masiv[x]<='z')
scanf("%c",&masiv[++x]);
masiv[x]='z'+1;
n=x;
if(x==0)
        return 0;

for(y=0;y<=x;y++)
                 masiv2[x]=masiv[x];

mini=masiv[0];
for(y=1;y<x;y++)
if(masiv[y]<mini)mini=masiv[y];
start=0;
while(masiv[start]==mini)start++;
for(y=start;y<x;y++)
                    if(masiv[y]==mini)
                                     q.push(y);
size=0;

while(!q.empty())
                 {
                 y=q.front();
                 q.pop();
                 z=0;
                 while(masiv[y+z]<=masiv[start])z++;
                 if(z>size){size=z;count=0;}
                 if(z==size)
                            grr[count++]=y;
                 }
best=0;
for(z=1;z<count;z++)
{
y=0;
while(masiv[grr[best]+y]==masiv[grr[z]+y])y++;
if(masiv[grr[best]+y]>masiv[grr[z]+y])
                                      best=z;
}
for(y=0;y<start;y++)
printf("%c",masiv[y]);
for(x=0;x<size;x++)
printf("%c",masiv[grr[best]+x]);
//masiv2[start+x]=masiv[grr[best]+x];
for(y=start;y<grr[best];y++)
                            {
                            printf("%c",masiv[y]);
                            //masiv2[start+x]=masiv[y];
                            x++;
                            }
for(y=grr[best]+size;y<n;y++)
{
printf("%c",masiv[y]);
//masiv2[start+x]=masiv[y];
x++;
}
printf("\n");
}

return 0;
}

