s = input().strip()
n = len(s)

# Precompute palindrome array
pal = [[False] * n for _ in range(n)]
for i in range(n-1, -1, -1):
    for j in range(i, n):
        if i == j:
            pal[i][j] = True
        else:
            if s[i] == s[j]:
                if j == i + 1:
                    pal[i][j] = True
                else:
                    pal[i][j] = pal[i+1][j-1]

# Precompute split_valid array
split_valid = [[False] * n for _ in range(n)]
for i in range(n-1, -1, -1):
    for j in range(i, n):
        if i == j:
            split_valid[i][j] = True
        else:
            if pal[i][j]:
                split_valid[i][j] = True
            else:
                for k in range(i, j):
                    if pal[i][k] and split_valid[k+1][j]:
                        split_valid[i][j] = True
                        break

# Collect all possible palindromic substrings and sort by length descending
candidates = []
for i in range(n):
    for j in range(i, n):
        if pal[i][j]:
            candidates.append((j - i + 1, i, j))

candidates.sort(reverse=True, key=lambda x: x[0])

max_len = 0
found = False

for length, i, j in candidates:
    if length == n:
        continue  # Skip the whole string as it's not allowed
    
    left_possible = False
    right_possible = False
    
    if i > 0:
        left_possible = split_valid[0][i-1]
    if j < n-1:
        right_possible = split_valid[j+1][n-1]
    
    if left_possible or right_possible:
        max_len = length
        found = True
        break

if found:
    print(max_len)
else:
    # If no split possible other than individual characters, result is 1
    print(1)