#include <iostream> #include <cstring> #include <cstdio> #include <vector> using namespace std; string s; void solve(){ getline(cin,s); int n = s.length(); vector<int> d1 (n); int l=0, r=-1; for (int i=0; i<n; ++i) { int k = (i>r ? 0 : min (d1[l+r-i], r-i)) + 1; while (i+k < n && i-k >= 0 && s[i+k] == s[i-k]) ++k; d1[i] = k--; if (i+k > r) l = i-k, r = i+k; } vector<int> d2 (n); l=0, r=-1; for (int i=0; i<n; ++i) { int k = (i>r ? 0 : min (d2[l+r-i+1], r-i+1)) + 1; while (i+k-1 < n && i-k >= 0 && s[i+k-1] == s[i-k]) ++k; d2[i] = --k; if (i+k-1 > r) l = i-k, r = i+k-1; } string res; int mx = 0; int st=0; int ln=0; for(int i=0; i<n; i++){ //cout << d1[i] << " "<< d2[i] << endl; if(d1[i]*2-1 > mx){ mx = d1[i]*2-1; st = i-d1[i]+1; ln = d1[i]*2-1; //res = s.substr(i-d1[i]+1,d1[i]*2-1); } if(d2[i]*2 > mx){ mx = d2[i]*2; st = i-d2[i]; ln = d2[i]*2; //res = s.substr(i-d2[i],d2[i]*2); } } //cout << mx << endl; cout << s.substr(st,ln) << endl; } int main(){ //freopen("test.in","r",stdin); solve(); return 0; }