def longest_palindrome(s):
    n = len(s)
    if n == 0:
        return 0
    
    # 初始化动态规划表
    dp = [[False] * n for _ in range(n)]
    max_len = 1  # 记录最长回文子串的长度,初始值为1(单字符)
    start = 0    # 记录最长回文子串的起始位置

    # 所有长度为1的子串都是回文
    for i in range(n):
        dp[i][i] = True
    
    # 处理长度为2的子串
    for i in range(n - 1):
        if s[i] == s[i + 1]:
            dp[i][i + 1] = True
            start = i
            max_len = 2

    # 处理长度大于2的子串
    for length in range(3, n + 1):  # 子串长度从3到n
        for i in range(n - length + 1):  # 起始位置
            j = i + length - 1  # 终止位置
            if s[i] == s[j] and dp[i + 1][j - 1]:
                dp[i][j] = True
                if length > max_len:
                    start = i
                    max_len = length

    # 返回最长回文子串的长度
    return max_len

# 读取输入
s = input()

# 输出最长有效密码串的长度
print(longest_palindrome(s))