#include <bits/stdc++.h>
using namespace std;
const int maxn = 4e3 + 10;
int arr[100], dp[maxn][maxn], n;
pair<int, int> par[maxn][maxn];
string s, ans = "";
void cal_dp() {
  for (int i = 0; i < n; i++) dp[i][i + 1] = 1;
  for (int i = n - 1; i >= 0; i--)
    for (int j = i + 2; j <= n; j++) {
      if (s[i] == s[j - 1] && dp[i][j] < dp[i + 1][j - 1] + 2)
        dp[i][j] = dp[i + 1][j - 1] + 2, par[i][j] = {1, 1};
      if (dp[i][j] < dp[i + 1][j]) dp[i][j] = dp[i + 1][j], par[i][j] = {1, 0};
      if (dp[i][j] < dp[i][j - 1]) dp[i][j] = dp[i][j - 1], par[i][j] = {0, 1};
    }
}
int main() {
  cin >> s;
  n = s.size();
  for (int i = 0; i < n; i++) arr[s[i] - 'a']++;
  for (int i = 0; i < 26; i++)
    if (arr[i] >= 100) {
      for (int j = 0; j < 100; j++) cout << (char)(i + 'a');
      cout << endl;
      return 0;
    }
  cal_dp();
  int len = 0, l = 0, r = n;
  while (l + 1 < r) {
    if (len == 100) break;
    auto tmp = par[l][r];
    if (par[l][r] == make_pair(1, 1)) ans += s[l], len += 2;
    l += tmp.first, r -= tmp.second;
  }
  cout << ans;
  if (len != 100 && l + 1 == r) cout << s[l];
  reverse(ans.begin(), ans.end());
  cout << ans << endl;
}
