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