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 C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>

using namespace std;
//using namespace __gnu_pbds;

typedef long long int	ll;
typedef long double	ld;
typedef pair<int,int>   ii;
typedef vector< ii >   vii;
typedef vector<int>     vi;
typedef vector< vi >   vvi;
//typedef tree<ii,null_type,less<ii>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;

#define mm 1000005
#define nn 5005
#define xx real()
#define yy imag()
#define mod 1000000007
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define sz(a) (ll)(a.size())
#define all(a) a.begin(),a.end()
#define forn(i, n) for(int i = 0; i < int(n); ++i)
#define rep(i, a, b) for(int i = int(a); i <= int(b); ++i)
#define cases ll t;  cin>>t;   while(t--)
#define check(a,n) forn(iiii,int(n)) cout<<int(a[iiii])<<" "; cout<<endl
#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
int n;
string s;

int main()
{
    fast_io;
    cin>>s;
    n=sz(s);
    int flag=s[0]-'0',b=0,k;
    vi v;
    forn(i,n)
        if(s[i]=='1'&&flag==1) b++;
        else if(s[i]=='1') v.pb(b),b=1,flag=1;
        else if(s[i]=='0'&&flag==1) v.pb(b),b=1,flag=0;
        else b++;
    v.pb(b);
   // check(v,sz(v));
    if(sz(v)%2==1)
    {
        k=n;
        forn(i,sz(v)-1) k=min(k,v[i]+v[i+1]);
    }
    else
    {
        int k1=n-v[sz(v)-1],k2=n-v[0];
        forn(i,sz(v)-2) k1=min(k1,v[i]+v[i+1]);
        forn(i,sz(v)-2) k2=min(k2,v[i+1]+v[i+2]);
        k=max(k1,k2);
    }
    cout<<k;
    return 0;
}