/*
TASK: XNP
LANG: C++
*/
#include<bits/stdc++.h>
#define int long long
#define f1(i, n) for(int i=1;i<=n;++i)
#define all(x) x.begin(), x.end()
#define fi first_min
#define se second
#define pb push_back
#define endl "\n"
#define NAME "XNP"
using namespace std;
const int maxn = 1e5 + 5;
const int INF = 1e18;
int dp[3005][3636];
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
if (fopen(NAME".INP", "r")) {
freopen(NAME".INP", "r", stdin);
freopen(NAME".OUT", "w", stdout);
}
string s, t;
cin >> s;
t = s;
reverse(all(s));
int a = s.size(), b = t.size();
// s = " " + s;
// t = " " + t;
for (int i = 1; i <= a; ++i) {
for (int j = 1; j <= b; ++j) {
if (s[i - 1] == t[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
}
else {
dp[i][j] = max({dp[i - 1][j], dp[i][j - 1]});
}
}
}
int temp = dp[a][b];
string res = "";
for (int i = a; i >= 1; --i) {
for (int j = b; j >= 1; --j) {
if (temp == dp[i][j] && s[i - 1] == t[j - 1]) {
res += s[i - 1];
temp--;
break;
}
// cout << dp[i][j] << " ";
}
// cout << endl;
}
reverse(all(res));
cout << res;
// cout<<res.size();
return 0;
}
LyoKVEFTSzogWE5QCkxBTkc6IEMrKwoqLwojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBmMShpLCBuKSBmb3IoaW50IGk9MTtpPD1uOysraSkKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgZmkgZmlyc3RfbWluCiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgZW5kbCAiXG4iCiNkZWZpbmUgTkFNRSAiWE5QIgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgbWF4biA9IDFlNSArIDU7CmNvbnN0IGludCBJTkYgPSAxZTE4OwoKaW50IGRwWzMwMDVdWzM2MzZdOwoKCmludDMyX3QgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBjb3V0LnRpZShudWxscHRyKTsKCiAgICBpZiAoZm9wZW4oTkFNRSIuSU5QIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4oTkFNRSIuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihOQU1FIi5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgc3RyaW5nIHMsIHQ7CiAgICBjaW4gPj4gczsKICAgIHQgPSBzOwogICAgcmV2ZXJzZShhbGwocykpOwogICAgaW50IGEgPSBzLnNpemUoKSwgYiA9IHQuc2l6ZSgpOwogICAgLy8gcyA9ICIgIiArIHM7CiAgICAvLyB0ID0gIiAiICsgdDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IGE7ICsraSkgewogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IGI7ICsraikgewogICAgICAgICAgICBpZiAoc1tpIC0gMV0gPT0gdFtqIC0gMV0pIHsKICAgICAgICAgICAgICAgIGRwW2ldW2pdID0gZHBbaSAtIDFdW2ogLSAxXSArIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IG1heCh7ZHBbaSAtIDFdW2pdLCBkcFtpXVtqIC0gMV19KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpbnQgdGVtcCA9IGRwW2FdW2JdOwogICAgc3RyaW5nIHJlcyA9ICIiOwoKICAgIGZvciAoaW50IGkgPSBhOyBpID49IDE7IC0taSkgewogICAgICAgIGZvciAoaW50IGogPSBiOyBqID49IDE7IC0taikgewogICAgICAgICAgICBpZiAodGVtcCA9PSBkcFtpXVtqXSAmJiBzW2kgLSAxXSA9PSB0W2ogLSAxXSkgewogICAgICAgICAgICAgICAgcmVzICs9IHNbaSAtIDFdOwogICAgICAgICAgICAgICAgdGVtcC0tOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gY291dCA8PCBkcFtpXVtqXSA8PCAiICI7CiAgICAgICAgfQogICAgICAgIC8vIGNvdXQgPDwgZW5kbDsKICAgIH0KCiAgICByZXZlcnNlKGFsbChyZXMpKTsKICAgIGNvdXQgPDwgcmVzOwogICAgLy8gY291dDw8cmVzLnNpemUoKTsKCgoKICAgIHJldHVybiAwOwp9Cg==