#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void checkmin(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void checkmax(T &a, T b) {
  if (b > a) a = b;
}
int cond = (long long)1;
const int sz = (int)1e6 + 11;
char buf[sz];
void _main() {
  scanf("%s", buf);
  int n = strlen(buf);
  reverse(buf, buf + n);
  for (int i = (0); i < (n); ++i) buf[i] -= '0';
  {
    if (cond > 0) {
      cond--;
      for (int xxx = (0); xxx < (1); ++xxx)
        cerr << 56 << " "
             << "n"
             << " " << n << endl;
      cerr.flush();
    }
  };
  int ret = 0;
  int cnt = 0;
  for (int i = 0; i < n; i++) {
    int cval = buf[i] + cnt;
    if (i >= n - 1 && cval == 1) break;
    cnt = cval / 2;
    cval %= 2;
    if (cval == 0) {
      ret++;
    } else {
      cval = 0;
      ret++;
      ret++;
      cnt++;
    }
  }
  printf("%d\n", ret);
}
int main(int argc, char **argv) {
  string p = "../gcj/source/" + string("") + argv[0][strlen(argv[0]) - 1];
  for (int i = (0); i < (argc); ++i)
    if (strcmp(argv[i], "1n") == 0) {
      freopen("1.in", "r", stdin);
    }
  for (int i = (0); i < (argc); ++i)
    if (strcmp(argv[i], "2n") == 0) {
      freopen("2.in", "r", stdin);
    }
  for (int i = (0); i < (argc); ++i)
    if (strcmp(argv[i], "3n") == 0) {
      freopen("3.in", "r", stdin);
    }
  for (int i = (0); i < (argc); ++i)
    if (strcmp(argv[i], "4n") == 0) {
      freopen("4.in", "r", stdin);
    }
  for (int i = (0); i < (argc); ++i)
    if (strcmp(argv[i], "5n") == 0) {
      freopen("5.in", "r", stdin);
    }
  for (int i = (0); i < (argc); ++i)
    if (strcmp(argv[i], "s0") == 0) {
      freopen((p + "-small-0.in").c_str(), "r", stdin);
      freopen((p + "-small-0.out").c_str(), "w", stdout);
    }
  for (int i = (0); i < (argc); ++i)
    if (strcmp(argv[i], "s1") == 0) {
      freopen((p + "-small-1.in").c_str(), "r", stdin);
      freopen((p + "-small-1.out").c_str(), "w", stdout);
    }
  for (int i = (0); i < (argc); ++i)
    if (strcmp(argv[i], "s2") == 0) {
      freopen((p + "-small-2.in").c_str(), "r", stdin);
      freopen((p + "-small-2.out").c_str(), "w", stdout);
    }
  for (int i = (0); i < (argc); ++i)
    if (strcmp(argv[i], "l0") == 0) {
      freopen((p + "-large-0.in").c_str(), "r", stdin);
      freopen((p + "-large-0.out").c_str(), "w", stdout);
    }
  for (int i = (0); i < (argc); ++i)
    if (strcmp(argv[i], "q") == 0) cond = 1 << 30;
  _main();
  return 0;
}
