import sys sys.setrecursionlimit(5*10**5) input = sys.stdin.readline from collections import defaultdict, deque, Counter from heapq import heappop, heappush from bisect import bisect_left, bisect_right from math import gcd s = list(input().rstrip()) n = len(s) dr = [[] for i in range(n)] for i in range(n): l, r= i,i for j in range(n): ll = l-j rr = r+j if ll < 0 or rr >= n: break if s[ll] == s[rr]: dr[rr].append(ll) else: break for i in range(n-1): l, r = i, i+1 for j in range(n): ll = l-j rr = r+j if ll < 0 or rr >= n: break if s[ll] == s[rr]: dr[rr].append(ll) else: break dp = [1]*(n) for i in range(1, n): for j in dr[i]: if j == 0: dp[i] = i+1 else: dp[i] = max(dp[i],min(i-j+1, dp[j-1])) print(dp[-1])