#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;
}