#include <bits/stdc++.h>
using namespace std;
int get(int x) {
  int ret = 0;
  while (x) {
    x = x / 2;
    ret++;
  }
  return ret;
}
const int M = 25;
char s[1000005];
int n, i, j, ans, f[2][2][50];
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  memset(f, 0x7f, sizeof(f));
  f[0][0][M] = 0;
  for (i = 1; i <= n; i++)
    for (j = 1; j < 50; j++) {
      f[i & 1][0][j] = f[i & 1][1][j] = 1e9;
      if (s[i] == '1') {
        f[i & 1][0][j] =
            min(f[(i - 1) & 1][0][j] + 1, f[(i - 1) & 1][1][j - 1] + 1);
        f[i & 1][1][j] =
            min(f[(i - 1) & 1][1][j], f[(i - 1) & 1][0][j + 1] + 1);
      } else {
        f[i & 1][1][j] =
            min(f[(i - 1) & 1][1][j] + 1, f[(i - 1) & 1][0][j + 1] + 1);
        f[i & 1][0][j] =
            min(f[(i - 1) & 1][0][j], f[(i - 1) & 1][0][j - 1] + 1);
      }
    }
  ans = 1e9;
  for (i = 1; i < 50; i++) {
    ans = min(ans, f[n & 1][1][i] + get(abs(i - M)));
    ans = min(ans, f[n & 1][0][i] + get(abs(i - M)));
  }
  printf("%d\n", ans);
}
