#include<bits/stdc++.h>
using namespace std;

typedef long long LL;

const int N=1000000;

char s[N+9];
int n;

void into(){
  scanf("%s",s+1);
  n=strlen(s+1);
}

int pre[N+9],suf[N+9];

void Get_suf(){
  for (int i=1;i<=n;++i) pre[i]=pre[i-1]+(s[i]=='0'?-1:1);
  suf[n]=pre[n];
  for (int i=n-1;i>=0;--i) suf[i]=min(pre[i],suf[i+1]);
}

int Get_ans(int lim){
  int res=0,now=0;
  for (int i=1;i<=n;++i){
	if (s[i]=='?'&&suf[i]+now>=lim+2) now-=2;
	res=max(res,pre[i]+now);
  }
  return res-lim;
}

int ans;

void Get_ans(){
  ans=min(Get_ans(suf[0]),Get_ans(suf[0]-1));
}

void work(){
  Get_suf();
  Get_ans();
}

void outo(){
  printf("%d\n",ans);
}

int main(){
  into();
  work();
  outo();
  return 0;
}