Problem:
Score : 500 points

Problem Statement

You are given a string S consisting of 0 and 1.
Find the maximum integer K not greater than |S| such that we can turn all the characters of S into 0 by repeating the following operation some number of times.

Choose a contiguous segment [l,r] in S whose length is at least K (that is, r-l+1\geq K must be satisfied). For each integer i such that l\leq i\leq r, do the following: if S_i is 0, replace it with 1; if S_i is 1, replace it with 0.

Constraints

1\leq |S|\leq 10^5

S_i(1\leq i\leq N) is either 0 or 1.

Input

Input is given from Standard Input in the following format:

S

Output

Print the maximum integer K such that we can turn all the characters of S into 0 by repeating the operation some number of times.

Sample Input 1

010

Sample Output 1

2

We can turn all the characters of S into 0 by the following operations:

Perform the operation on the segment S[1,3] with length 3. S is now 101.

Perform the operation on the segment S[1,2] with length 2. S is now 011.

Perform the operation on the segment S[2,3] with length 2. S is now 000.

Sample Input 2

100000000

Sample Output 2

8

Sample Input 3

00001111

Sample Output 3

4

Solution in Python (3.4.3) (judge verdict: Accepted)

S = list(map(int, input()))
N = len(S)

def solve(c):
	cond = 0
	f = [0] * N
	if S[0] == 1:
		f[0] = 1
	cnt = 1
	for i in range(1,N-c+1):
		if i < c:
			f[i] = f[i-1]
			if (S[i] + f[i]) % 2 == 1:
				f[i] += 1
			cnt += 1

		if i >= c:
			f[i] = f[i-1] - f[i-c]
			if (S[i] + f[i]) % 2 == 1:
				f[i] += 1
			cnt += 1
		
		if cnt >= c:
			cond = 1
			break
	if cond == 0:
		for i in range(N-c+1,N):
			f[i] = f[i-1] - f[i-c]
			if (S[i] + f[i]) % 2 == 0:
				cnt += 1
			else:
				break

			if cnt >= c:
				cond = 1
				break

	return cond

def binary_search(s,f):
	if s == f:
		return s
	elif s+1 == f:
		if solve(f):
			return f
		else:
			return s

	c = (s+f)//2

	if solve(c):
		return binary_search(c,f)
	else:
		return binary_search(s,c)

print(binary_search(1,N))