# Input and preprocess.
s = input()
sa = f"#{'#'.join(s)}#"
saLen = len(sa)
# Manacher algo.
center = 0
maxRight = 0
resStart = 0
resLen = 1
p = [0] * saLen
for i in range(saLen):
# Fast p[i]
if i < maxRight:
mirror = 2 * center - i
p[i] = min(maxRight-i, p[mirror])
# Determine spreading start.
left = i - p[i] - 1
right = i + p[i] + 1
# Spread.
while left >= 0 and right < saLen and sa[left] == sa[right]:
left -= 1
right += 1
p[i] += 1
left = i - p[i]
right = i + p[i]
# Update maxRight.
if right > maxRight:
maxRight = right
center = i
# Update result.
curLen = p[i]
if curLen > resLen:
resLen = curLen
resStart = left
print(resLen)