#include<cstdio>
#include<algorithm>
using namespace std;
char p[1010000];
int n;
bool Pos(int K){
    int i;
    int b[2]={0,1},e[2]={K,K-1}, CK[2]={0,0};
    if(K&1)swap(e[0],e[1]);
   // printf("%d\n",K);
    for(i=0;p[i];i++){
        int b0=b[0],b1=b[1],e0=e[0],e1=e[1];
        if(p[i]=='1'){
            b[0]=b1+1;
            b[1]=b0+1;
            e[0]=e1+1;
            e[1]=e0+1;
            if(e[0]>K)e[0]-=2;
            if(e[1]>K)e[1]-=2;
        }
        if(p[i]=='0'){
            b[0]=b1-1;
            b[1]=b0-1;
            e[0]=e1-1;
            e[1]=e0-1;
            if(b[0]<0)b[0]+=2;
            if(b[1]<0)b[1]+=2;
        }
        if(p[i]=='?'){
            b[0]=b1-1;
            b[1]=b0-1;
            e[0]=e1+1;
            e[1]=e0+1;
            if(b[0]<0)b[0]+=2;
            if(b[1]<0)b[1]+=2;
            if(e[0]>K)e[0]-=2;
            if(e[1]>K)e[1]-=2;
        }
        if(b[0]>e[0])CK[0]=1;
        if(b[1]>e[1])CK[1]=1;
        if(CK[0]&&CK[1])return false;
        swap(CK[0],CK[1]);
    }
    return true;
}
int main(){
    scanf("%s",p);
    int i;
    for(i=0;p[i];i++);
    n=i;
    int b=1,e=n,r=n;
    while(b<=e){
        int mid=(b+e)>>1;
        if(Pos(mid)){
            r=mid;
            e=mid-1;
        }
        else b=mid+1;
    }
    printf("%d\n",r);
}
