"""
Manacher算法: 求一个字符串的最长回文子串算法
"""
def extend(s, l, r):
while l >= 0 and r < len(s) and s[l] == s[r]:
l -= 1
r += 1
return ((r - 1) - (l + 1)) // 2
def longestPalindrome(s):
s = '#' + '#'.join(list(s)) + '#' # 保持字符串的长度为奇数
dp = [0] * len(s)
center, right = 0, 0 # 维护最右端的回文子串
for i in range(len(s)):
# i是大于center, 可能大于或小于right
if i > right:
# 直接暴力求
dp[i] = extend(s, i, i)
else:
# 以center为中心, (i_sym + i) / 2 = center => i_sym = center * 2 - i
i_sym = center * 2 - i # i的对称点
min_len = min(dp[i_sym], right - i)
dp[i] = extend(s, i - min_len, i + min_len)
# 更新最右回文区间
if i + dp[i] > right:
center, right = i, i + dp[i]
return max(dp)
s = input()
print(longestPalindrome(s))