def manachers(s): t = '#' + '#'.join(s) + '#' n = len(t) p = [0] * n c = r = 0 max_len = 0 for i in range(n): mirror = 2 * c - i if i < r: p[i] = min(r - i, p[mirror]) a, b = i + (1 + p[i]), i - (1 + p[i]) while a < n and b >= 0 and t[a] == t[b]: p[i] += 1 a += 1 b -= 1 if i + p[i] > r: c = i r = i + p[i] if p[i] > max_len: max_len = p[i] return max_len def main(): import sys S = sys.stdin.readline().strip() n = len(S) if n == 0: print(0) return L = manachers(S) mod = 10**18 + 3 base = 911382629 # Precompute prefix hashes for S prefix_hash = [0] * (n + 1) power = [1] * (n + 1) for i in range(n): prefix_hash[i+1] = (prefix_hash[i] * base + ord(S[i])) % mod power[i+1] = (power[i] * base) % mod # Precompute prefix hashes for reversed S R = S[::-1] prefix_hash_rev = [0] * (n + 1) for i in range(n): prefix_hash_rev[i+1] = (prefix_hash_rev[i] * base + ord(R[i])) % mod max_expand = 0 for i in range(n): low = 0 high = min(i, (n-1) - i) best_l = 0 while low <= high: mid = (low + high) // 2 if mid == 0: best_l = 0 low = mid + 1 continue a = n - i b = a + mid - 1 if b >= len(R): valid = False else: hash_rev_left = (prefix_hash_rev[b + 1] - prefix_hash_rev[a] * power[mid]) % mod right_start = i + 1 right_end = i + 1 + mid - 1 if right_end >= n: valid = False else: hash_right = (prefix_hash[right_end + 1] - prefix_hash[right_start] * power[mid]) % mod if a <= len(R) and right_end < n and hash_rev_left == hash_right: best_l = mid low = mid + 1 else: high = mid - 1 if best_l > max_expand: max_expand = best_l M = max_expand * 2 if L == n: answer = max(L - 1, M) else: answer = max(L, M) print(answer) if __name__ == "__main__": main()