#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 1000010

int n,sum[maxn],msum[maxn];
char s[maxn];

int main()
{
	scanf("%s",s+1);n=strlen(s+1);
	for(int i=1;i<=n;i++)sum[i]=sum[i-1]+(s[i]=='1'?1:-1);
	msum[n]=sum[n];for(int i=n-1;i>=1;i--)msum[i]=max(msum[i+1],sum[i]);
	int mx=max(msum[1],0),mn,now,ans=n+1;
	for(int j=1;j<=2;j++)
	{
		now=mn=0;
		for(int i=1;i<=n;i++)
		{
			if(s[i]=='?'){if(msum[i]-sum[i-1]+now+2<=mx)now++; else now--;}
			else if(s[i]=='1')now++; else now--;
//			printf("%c : %d %d %d\n",s[i],now,msum[i],sum[i-1]);
			mn=min(mn,now);
		}
		ans=min(ans,mx-mn);mx++;
	}
	printf("%d",ans);
}