# -*- coding: utf-8 -*-



"""

参考：https://img.atcoder.jp/arc088/editorial.pdf

・一番真ん中に近い境界の、始点か終点の遠い方の距離が最適

・中央付近から順に境界を1つずつ減らして最終的に全0にできる。

"""



S = eval(input())



dist = float('inf')

for i in range(1, len(S)):

    if S[i] != S[i-1]:

        # 境界を見つけたら、始点か終点の遠い方の距離を取る

        tmp = max(i, len(S)-i)

        # この値が小さい程中央に近い位置

        if tmp < dist:

            dist = tmp

# 境界が1つもないなら、文字列の長さをそのまま使える

if dist == float('inf'):

    dist = len(S)



print(dist)

# -*- coding: utf-8 -*-



import sys



def input(): return sys.stdin.readline().strip()

def list2d(a, b, c): return [[c] * b for i in range(a)]

def list3d(a, b, c, d): return [[[d] * c for j in range(b)] for i in range(a)]

def list4d(a, b, c, d, e): return [[[[e] * d for j in range(c)] for j in range(b)] for i in range(a)]

def ceil(x, y=1): return int(-(-x // y))

def INT(): return int(eval(input()))

def MAP(): return list(map(int, input().split()))

def LIST(N=None): return list(MAP()) if N is None else [INT() for i in range(N)]

def Yes(): print('Yes')

def No(): print('No')

def YES(): print('YES')

def NO(): print('NO')

sys.setrecursionlimit(10 ** 7)

INF = 10 ** 18

MOD = 10 ** 9 + 7



S = list(eval(input()))

N = len(S)



ans = ceil(N, 2)

for i in range(ceil(N, 2), N):

    # 真ん中から始めて、反対側と一致してるかと、1つ前と一致しているか

    if not S[i] == S[N-1-i] == S[i-1]:

        break

    ans += 1

print(ans)

# -*- coding: utf-8 -*-
"""
参考：https://img.atcoder.jp/arc088/editorial.pdf
・一番真ん中に近い境界の、始点か終点の遠い方の距離が最適
・中央付近から順に境界を1つずつ減らして最終的に全0にできる。
"""
S = eval(input())
dist = float("inf")
for i in range(1, len(S)):
    if S[i] != S[i - 1]:
        # 境界を見つけたら、始点か終点の遠い方の距離を取る
        tmp = max(i, len(S) - i)
        # この値が小さい程中央に近い位置
        if tmp < dist:
            dist = tmp
# 境界が1つもないなら、文字列の長さをそのまま使える
if dist == float("inf"):
    dist = len(S)
print(dist)

# -*- coding: utf-8 -*-
import sys


def input():
    return sys.stdin.readline().strip()


def list2d(a, b, c):
    return [[c] * b for i in range(a)]


def list3d(a, b, c, d):
    return [[[d] * c for j in range(b)] for i in range(a)]


def list4d(a, b, c, d, e):
    return [[[[e] * d for j in range(c)] for j in range(b)] for i in range(a)]


def ceil(x, y=1):
    return int(-(-x // y))


def INT():
    return int(eval(input()))


def MAP():
    return list(map(int, input().split()))


def LIST(N=None):
    return list(MAP()) if N is None else [INT() for i in range(N)]


def Yes():
    print("Yes")


def No():
    print("No")


def YES():
    print("YES")


def NO():
    print("NO")


sys.setrecursionlimit(10**7)
INF = 10**18
MOD = 10**9 + 7
S = list(eval(input()))
N = len(S)
ans = ceil(N, 2)
for i in range(ceil(N, 2), N):
    # 真ん中から始めて、反対側と一致してるかと、1つ前と一致しているか
    if not S[i] == S[N - 1 - i] == S[i - 1]:
        break
    ans += 1
print(ans)

-""" -参考：https://img.atcoder.jp/arc088/editorial.pdf -・一番真ん中に近い境界の、始点か終点の遠い方の距離が最適 -・中央付近から順に境界を1つずつ減らして最終的に全0にできる。 -""" -S = eval(input()) -dist = float("inf") -for i in range(1, len(S)): -    if S[i] != S[i - 1]: -        # 境界を見つけたら、始点か終点の遠い方の距離を取る -        tmp = max(i, len(S) - i) -        # この値が小さい程中央に近い位置 -        if tmp < dist: -            dist = tmp -# 境界が1つもないなら、文字列の長さをそのまま使える -if dist == float("inf"): -    dist = len(S) -print(dist) +import sys + + +def input(): +    return sys.stdin.readline().strip() + + +def list2d(a, b, c): +    return [[c] * b for i in range(a)] + + +def list3d(a, b, c, d): +    return [[[d] * c for j in range(b)] for i in range(a)] + + +def list4d(a, b, c, d, e): +    return [[[[e] * d for j in range(c)] for j in range(b)] for i in range(a)] + + +def ceil(x, y=1): +    return int(-(-x // y)) + + +def INT(): +    return int(eval(input())) + + +def MAP(): +    return list(map(int, input().split())) + + +def LIST(N=None): +    return list(MAP()) if N is None else [INT() for i in range(N)] + + +def Yes(): +    print("Yes") + + +def No(): +    print("No") + + +def YES(): +    print("YES") + + +def NO(): +    print("NO") + + +sys.setrecursionlimit(10**7) +INF = 10**18 +MOD = 10**9 + 7 +S = list(eval(input())) +N = len(S) +ans = ceil(N, 2) +for i in range(ceil(N, 2), N): +    # 真ん中から始めて、反対側と一致してるかと、1つ前と一致しているか +    if not S[i] == S[N - 1 - i] == S[i - 1]: +        break +    ans += 1 +print(ans)