import java.io.*; import java.util.*; public class prefokery_yuizumi { public static void main(String[] args) { Scanner cin = new Scanner(System.in); while(cin.hasNextLine()) { String str = cin.nextLine(); int n = str.length(); if(n < 3 || n > 2000) { throw new RuntimeException("Illegal Input"); } Operation[][] op = new Operation[n+1][n+1]; for(int i = 0; i <= 1; i++) { for(int j = 0; j + i <= n; j++) { op[i][j] = new Create(str.substring(j, j+i)); } } for(int i = 2; i <= n; i++) { for(int j = 0; j + i <= n; j++) { if(str.charAt(j) == str.charAt(j+i-1)) op[i][j] = new Append(op[i-2][j+1], str.charAt(j)); else { Operation op0 = op[i-1][j+0]; Operation op1 = op[i-1][j+1]; op[i][j] = (op0.length() > op1.length()) ? op0 : op1; } } } if(op[n][0].length() < 3) { throw new RuntimeException("Illegal Input"); } System.out.println(op[n][0].getPalindrome()); op = null; //System.gc(); } } private static interface Operation { String getPalindrome(); int length(); } private static class Create implements Operation { private String val; public Create(String val) { this.val = val; } public String getPalindrome() { return val; } public int length() { return val.length(); } } private static class Append implements Operation { private int len; private Operation par; private char val; public Append(Operation par, char val) { this.len = par.length() + 2; this.par = par; this.val = val; } public String getPalindrome() { return val + par.getPalindrome() + val; } public int length() { return len; } } }