char str[MAXn * 2 + 10]; int rad[MAXn * 2 + 10]; voidEvaRad(int len){ for (int i = 1, l = 1, r = 0; i <= len; ++i) { if (i > r) rad[i] = 0; else rad[i] = min(r - i, rad[r + l - i]); while (i + rad[i] < len && i - rad[i] > 1 && str[i + rad[i] + 1] == str[i - rad[i] - 1]) ++rad[i]; if (i + rad[i] > r) { r = i + rad[i]; l = i - rad[i]; } } }
char strfirst[MAXn + 10]; int len1, len2, ans; signedmain(){ scanf("%s", (strfirst + 1)); len1 = strlen(strfirst + 1); str[++len2] = '#'; for (int i = 1; i <= len1; ++i) { str[++len2] = strfirst[i]; str[++len2] = '#'; } EvaRad(len2); for (int i = 1; i <= len2; ++i) { ans = max(ans, i & 1 ? (rad[i] & (~1)) : (rad[i] & (~1)) + 1); } printf("%d\n", ans); return0; }