#include <bits/stdc++.h>
using namespace std;
const int N = 1000005;
int f[N], mxa[N], mna[N];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cout << setprecision(32);
  string s;
  cin >> s;
  int n = s.size();
  mxa[n + 1] = mna[n + 1] = 0;
  for (int i = n; i >= 1; i--) {
    if (s[i - 1] == '?') {
      mxa[i] = max(mxa[i + 1], 0);
      mna[i] = min(mna[i + 1], 0);
    } else if (s[i - 1] == '0') {
      mxa[i] = max(mxa[i + 1] - 1, -1);
      mna[i] = min(mna[i + 1] - 1, -1);
    } else {
      mxa[i] = max(mxa[i + 1] + 1, 1);
      mna[i] = min(mna[i + 1] + 1, 1);
    }
  }
  int cur = 0, mx = 0, mn = 0;
  for (int i = 1; i <= n; i++) {
    if (s[i - 1] == '?') {
      int mn1 = mna[i + 1] + cur;
      int mx1 = mxa[i + 1] + cur;
      if (mn < mn1) {
        s[i - 1] = '0';
      } else if (mx > mx1) {
        s[i - 1] = '1';
      } else if (cur + 1 <= mx) {
        s[i - 1] = '1';
      } else {
        s[i - 1] = '0';
      }
    }
    if (s[i - 1] == '0')
      cur--;
    else
      cur++;
    mx = max(mx, cur);
    mn = min(mn, cur);
  }
  cout << mx - mn << endl;
  return 0;
}
