#include <bits/stdc++.h>
#define MaxN 2005
#define INF 2140000000
#define MOD 1000000007
#define Next(i,j) D[N+1-i][N+2-j]
using namespace std;
FILE*IN,*OUT;
short N,D[MaxN][MaxN];
char str[MaxN],ch[MaxN][MaxN];
void Solve(int i,int j)
{
fprintf(OUT,"%c",ch[i][j]);
if(D[i][j]==1)
return;
if(D[i][j]==2)
{
fprintf(OUT,"%c",ch[i][j]);
return;
}
int p=j,k=Next(i,j);
while(str[k]!=str[p])
p--;
Solve(k,p);
fprintf(OUT,"%c",ch[i][j]);
}
bool Check(int x,int y,int i,int j,char c)
{
return D[x][y]+2>D[i][j]||(D[x][y]+2==D[i][j]&&c>ch[i][j]);
}
void Copy(int x,int y,int i,int j)
{
D[x][y]=D[i][j];
ch[x][y]=ch[i][j];
Next(x,y)=Next(i,j);
}
bool Bigger(int x,int y,int i,int j)
{
return D[x][y]>D[i][j]||(D[x][y]==D[i][j]&&ch[x][y]>ch[i][j]);
}
void Move(int x,int y,int i,int j,char c)
{
if(i>j)
{
D[x][y]=2;
ch[x][y]=c;
Next(x,y)=-1;
}
else
{
D[x][y]=2+D[i][j];
ch[x][y]=c;
Next(x,y)=i;
}
}
int main()
{
IN=fopen("elimin2.in","r");
OUT=fopen("elimin2.out","w");
fscanf(IN,"%s",str+1);
N=strlen(str+1);
for(int i=1;i<=N;i++)
D[i][i]=1,ch[i][i]=str[i],Next(i,i)=-1;
for(int d=1;d<N;d++)
for(int i=1;i<=N-d;i++)
{
Copy(i,i+d,i,i+d-1);
if(Bigger(i+1,i+d,i,i+d))
Copy(i,i+d,i+1,i+d);
if(str[i]==str[i+d])
if(Check(i+1,i+d-1,i,i+d,str[i]))
Move(i,i+d,i+1,i+d-1,str[i]);
}
Solve(1,N);
return 0;
}