#include <bits/stdc++.h>
using namespace std;
string S;
int N;
int Rcur[1010101];
int Rma[1010101];
void solve() {
  int i, j, k, l, r, x, y;
  string s;
  cin >> S;
  N = S.size();
  int cur = 0, Z = 0;
  for (auto& c : S) {
    if (c == '1')
      cur++;
    else
      cur--;
    Z = max(cur, Z);
  }
  for (i = N - 1; i >= 0; i--) {
    if (S[i] == '1') {
      Rcur[i] = Rcur[i + 1] - 1;
    } else {
      Rcur[i] = Rcur[i + 1] + 1;
    }
    Rma[i] = max(Rcur[i], Rma[i + 1]);
  }
  int mi = 0;
  cur = 0;
  for (i = 0; i < (N); i++) {
    if (S[i] == '1')
      cur++;
    else if (S[i] == '0')
      cur--;
    else {
      if (cur + 1 + (Rma[i + 1] - Rcur[i + 1]) > Z) {
        cur--;
      } else {
        cur++;
      }
    }
    mi = min(mi, cur);
  }
  cout << Z - mi << endl;
}
int main(int argc, char** argv) {
  string s;
  int i;
  if (argc == 1) ios::sync_with_stdio(false), cin.tie(0);
  for (i = 0; i < (argc - 1); i++) s += argv[i + 1], s += '\n';
  for (i = 0; i < (s.size()); i++) ungetc(s[s.size() - 1 - i], stdin);
  cout.tie(0);
  solve();
  return 0;
}
