#include <bits/stdc++.h>
#include <iostream>
#define ll long long
#define ld long double
#define Marwan ios::sync_with_stdio(false);cin.tie(nullptr);
#define all(dq) dq.begin(),dq.end()
using namespace std;
const ll mod = 1000000007;
void pre(){
Marwan
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
}
const int N=1005;
int dp[N][N];
string a;
int rec(int i=0,int j=a.size()-1) {
if(i==j)return 1;
if (i>j)return 0;
if (dp[i][j]!=-1)return dp[i][j];
int ch1=0;
if (a[i]==a[j])ch1=rec(i+1,j-1)+2;
int ch2=max(rec(i+1,j),rec(i,j-1));
return dp[i][j]=max(ch1,ch2);
}
string c;
map<pair<int,int>,string>m;
string bild(int i=0,int j=a.size()-1,string s1="",string s2="") {
if (j<i)return c=s1+s2;
if (i==j)return c=s1+a[i]+s2;
pair<int,int>ind={i,j};
if (m.count(ind))return m[ind];
if (rec(i,j)==rec(i+1,j-1)+2 and a[i]==a[j]) {
return m[ind]=bild(i+1,j-1,s1+a[i],a[i]+s2);
}
if (rec(i,j)==rec(i,j-1) and rec(i+1,j)==rec(i,j-1)) {
string ch1=bild(i+1,j,s1,s2),ch2=bild(i,j-1,s1,s2);
return m[ind]=min(ch2,ch1);
}
if (rec(i,j)==rec(i+1,j)) {
return m[ind]=bild(i+1,j,s1,s2);
}
if (rec(i,j)==rec(i,j-1)) {
return m[ind]=bild(i,j-1,s1,s2);
}
}
void solve() {
bool is = false;
while (cin>>a) {
if (is) cout << '\n';
is = true;
memset(dp,-1,sizeof dp);
m.clear();
cout<<bild(0,a.size()-1,"","");
}
}
int main(){
pre();
int t=1;//cin>>t;
while (t--){
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIE1hcndhbiAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUobnVsbHB0cik7CiNkZWZpbmUgYWxsKGRxKSAgZHEuYmVnaW4oKSxkcS5lbmQoKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBsbCBtb2QgPSAxMDAwMDAwMDA3Owp2b2lkIHByZSgpewogICAgTWFyd2FuCiNpZm5kZWYgT05MSU5FX0pVREdFCiAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKICAgIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgp9CmNvbnN0IGludCBOPTEwMDU7CmludCBkcFtOXVtOXTsKc3RyaW5nIGE7CmludCByZWMoaW50IGk9MCxpbnQgaj1hLnNpemUoKS0xKSB7CiAgICBpZihpPT1qKXJldHVybiAxOwogICAgaWYgKGk+ailyZXR1cm4gMDsKICAgIGlmIChkcFtpXVtqXSE9LTEpcmV0dXJuIGRwW2ldW2pdOwogICAgaW50IGNoMT0wOwogICAgaWYgKGFbaV09PWFbal0pY2gxPXJlYyhpKzEsai0xKSsyOwogICAgaW50IGNoMj1tYXgocmVjKGkrMSxqKSxyZWMoaSxqLTEpKTsKICAgIHJldHVybiBkcFtpXVtqXT1tYXgoY2gxLGNoMik7Cn0Kc3RyaW5nIGM7Cm1hcDxwYWlyPGludCxpbnQ+LHN0cmluZz5tOwpzdHJpbmcgYmlsZChpbnQgaT0wLGludCBqPWEuc2l6ZSgpLTEsc3RyaW5nIHMxPSIiLHN0cmluZyBzMj0iIikgewogICAgaWYgKGo8aSlyZXR1cm4gYz1zMStzMjsKICAgIGlmIChpPT1qKXJldHVybiAgYz1zMSthW2ldK3MyOwogICAgcGFpcjxpbnQsaW50PmluZD17aSxqfTsKICAgIGlmIChtLmNvdW50KGluZCkpcmV0dXJuIG1baW5kXTsKICAgIGlmIChyZWMoaSxqKT09cmVjKGkrMSxqLTEpKzIgYW5kIGFbaV09PWFbal0pIHsKICAgICAgICByZXR1cm4gbVtpbmRdPWJpbGQoaSsxLGotMSxzMSthW2ldLGFbaV0rczIpOwogICAgfQogICAgaWYgKHJlYyhpLGopPT1yZWMoaSxqLTEpIGFuZCByZWMoaSsxLGopPT1yZWMoaSxqLTEpKSB7CiAgICAgICAgc3RyaW5nIGNoMT1iaWxkKGkrMSxqLHMxLHMyKSxjaDI9YmlsZChpLGotMSxzMSxzMik7CiAgICAgICAgcmV0dXJuIG1baW5kXT1taW4oY2gyLGNoMSk7CiAgICB9CiAgICBpZiAocmVjKGksaik9PXJlYyhpKzEsaikpIHsKICAgICAgICByZXR1cm4gbVtpbmRdPWJpbGQoaSsxLGosczEsczIpOwogICAgfQogICAgaWYgKHJlYyhpLGopPT1yZWMoaSxqLTEpKSB7CiAgICAgICAgcmV0dXJuICBtW2luZF09YmlsZChpLGotMSxzMSxzMik7CiAgICB9Cn0Kdm9pZCBzb2x2ZSgpIHsKICAgIGJvb2wgaXMgPSBmYWxzZTsKICAgIHdoaWxlIChjaW4+PmEpIHsKICAgICAgICBpZiAoaXMpIGNvdXQgPDwgJ1xuJzsKICAgICAgICBpcyA9IHRydWU7CiAgICAgICAgbWVtc2V0KGRwLC0xLHNpemVvZiBkcCk7CiAgICAgICAgbS5jbGVhcigpOwogICAgICAgIGNvdXQ8PGJpbGQoMCxhLnNpemUoKS0xLCIiLCIiKTsKICAgIH0KfQppbnQgbWFpbigpewogICAgcHJlKCk7CiAgICBpbnQgdD0xOy8vY2luPj50OwogICAgd2hpbGUgKHQtLSl7CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIHJldHVybiAwOwp9