#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


string Manacher(string s){
    int n = (int)(s.size());

    vector<int> d1(n);
    for (int i = 0, l = 0, r = -1; i < n; i++) {
        int k = (i > r) ? 1 : min(d1[l + r - i], r - i + 1);
        while (0 <= i - k && i + k < n && s[i - k] == s[i + k]) {
            k++;
        }
        d1[i] = k--;
        if (i + k > r) {
            l = i - k;
            r = i + k;
        }
    }

    vector<int> d2(n);
    for (int i = 0, l = 0, r = -1; i < n; i++) {
        int k = (i > r) ? 0 : min(d2[l + r - i + 1], r - i + 1);
        while (0 <= i - k - 1 && i + k < n && s[i - k - 1] == s[i + k]) {
            k++;
        }
        d2[i] = k--;
        if (i + k > r) {
            l = i - k - 1;
            r = i + k ;
        }
    }

    int maxLen = 1;
    for(int i = 0; i < n; i++){
        if(d1[i] == i+1)
            maxLen = max(maxLen, 2*i+1);
        if(d2[i] == i)
            maxLen = max(maxLen, 2*i);
    }
    return s.substr(0,maxLen);
}


int main() {
    string s;
    cin >> s;
    cout << Manacher(s);
    return 0;
}