s = input(); n = len(s) f = [[False]*(i+1) for i in range(n)] for i in range(n): f[i][i] = True for i in range(n-1): if s[i]==s[i+1]: f[i+1][i] = True for d in range(3,n+1): for l in range(n-d+1): if s[l]==s[l+d-1] and f[l+d-2][l+1]: f[l+d-1][l] = True dp = [0]*n+[n] for r in range(n): for l in range(r+1): if f[r][l]: dp[r] = max(dp[r],min(dp[l-1],r-l+1)) print(dp[n-1])