# 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)