#include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> #include <memory.h> using namespace std; char s[1000010]; int d1[1000010], d2[1000010]; int main() { scanf("%s", s); int n = strlen(s); int bestlen = 0, ai = 0, aj = 0, k = 0, l = 0, r = -1; for (int i = 0; i < n; i++){ if (i > r) k = 1; else k = min(d1[l + r - i], r - i); while (0 <= i-k && i+k < n && s[i - k] == s[i + k]) k++; d1[i] = k; if (i + k - 1 > r) r = i + k - 1, l = i - k + 1; if (d1[i] * 2 - 1 > bestlen) { bestlen = d1[i] * 2 - 1; ai = i - d1[i] + 1; aj = i + d1[i] - 1; } } l = 0, r = -1, k = 0; for (int i = 0; i < n; i++) { if (i > r) k = 0; else k = min(d2[l + r - i + 1], r - i + 1); while (i + k < n && i - k - 1 >= 0 && s[i+k] == s[i - k - 1]) k++; d2[i] = k; if (i + k - 1 > r) l = i - k, r = i + k - 1; if (d2[i] * 2 > bestlen) { bestlen = d2[i] * 2; ai = i - d2[i]; aj = i + d2[i] - 1; } } for (int i = ai; i <= aj; i++) putchar(s[i]); return 0; }