import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*

class D

fun main( args: Array<String> ) {
    val br = BufferedReader( InputStreamReader( System.`in` ) )
//    while ( true ) {
        solve( br )
//    }
}

fun solve( br: BufferedReader ) {
    val s = ( "0" + br.readLine() + "0" ).toCharArray()
    val change = ArrayList<Int>()
    for ( i in 0 until s.lastIndex ) {
        if ( s[i] != s[i + 1] ) {
            change.add( i )
        }
    }
    var r = s.size - 2
    for ( c in change ) {
        r = Math.min( r, Math.max( c, s.size - 2 - c ) )
    }
    println( r )

//    val change0 = ArrayList<Int>()
//    change0.add( 0 )
//    change0.add( 0 )
//    change0.addAll( change )
//    val change1 = ArrayList<Int>()
//    change1.add( 0 )
//    change1.addAll( change )
//    change1.add( s.size - 2 )
//    var best = Math.max( getBest( s, change ), getBest( s, change0 ) )
//    change.add( s.size - 2 )
//    change.add( s.size - 2 )
//    change0.add( s.size - 2 )
//    change0.add( s.size - 2 )
//    best = Math.max( Math.max( best, getBest( s, change1 ) ), Math.max( getBest( s, change ), getBest( s, change0 ) ) )
//    println( getBest( s, change0 ) )
//    println( best )
}

private fun getBest( s: CharArray, change: ArrayList<Int>): Int {
    var best = s.size - 2
    for ( i in 0 until change.size / 2 ) {
        best = Math.min( best, change[i + change.size / 2] - change[i] )
    }
    return best


//    var l = 1
//    var r = s.size - 2
//    while ( l < r ) {
//        val m = ( l + r + 1 ) / 2
//        var good = true
//        for ( i in 0 until change.size / 2 ) {
//            good = good && ( ( change[i + change.size / 2] - change[i] ) >= m )
//        }
//        if ( good ) {
//            l = m
//        } else {
//            r = m - 1
//        }
//    }
//    return l
}