s = tuple(map(int, eval(input())))

n = len(s)



ret = n

p = s[0]

for i, x in enumerate(s):

    if x != p:

        ret = min(ret, max(i, n - i))

    p = x

print(ret)

# https://emtubasa.hateblo.jp/entry/2019/02/14/000000_2



def main():

    from itertools import tee

    S = eval(input())

    L = len(S)



    s1, s2 = tee(iter(S), 2)

    next(s2)



    k = L

    for i, (c1, c2) in enumerate(zip(s1, s2), start=1):

        if c1 != c2:

            t = max(i, L - i)

            if k > t:

                k = t

    print(k)





if __name__ == '__main__':

    main()



# 異なる文字の境界で

# 左端、右端からその境界までの距離のうち長い方を反転させることで、

# その境界をなくすことができる

# そのような長い方の距離の最小値であれば、どの境界であっても処理できる

s = tuple(map(int, eval(input())))
n = len(s)
ret = n
p = s[0]
for i, x in enumerate(s):
    if x != p:
        ret = min(ret, max(i, n - i))
    p = x
print(ret)

# https://emtubasa.hateblo.jp/entry/2019/02/14/000000_2
def main():
    from itertools import tee

    S = eval(input())
    L = len(S)
    s1, s2 = tee(iter(S), 2)
    next(s2)
    k = L
    for i, (c1, c2) in enumerate(zip(s1, s2), start=1):
        if c1 != c2:
            t = max(i, L - i)
            if k > t:
                k = t
    print(k)


if __name__ == "__main__":
    main()
# 異なる文字の境界で
# 左端、右端からその境界までの距離のうち長い方を反転させることで、
# その境界をなくすことができる
# そのような長い方の距離の最小値であれば、どの境界であっても処理できる

-s = tuple(map(int, eval(input()))) -n = len(s) -ret = n -p = s[0] -for i, x in enumerate(s): -    if x != p: -        ret = min(ret, max(i, n - i)) -    p = x -print(ret) +# https://emtubasa.hateblo.jp/entry/2019/02/14/000000_2 +def main(): +    from itertools import tee + +    S = eval(input()) +    L = len(S) +    s1, s2 = tee(iter(S), 2) +    next(s2) +    k = L +    for i, (c1, c2) in enumerate(zip(s1, s2), start=1): +        if c1 != c2: +            t = max(i, L - i) +            if k > t: +                k = t +    print(k) + + +if __name__ == "__main__": +    main() +# 異なる文字の境界で +# 左端、右端からその境界までの距離のうち長い方を反転させることで、 +# その境界をなくすことができる +# そのような長い方の距離の最小値であれば、どの境界であっても処理できる