#include #define rep(i, n) for (int i = 0; i < (n); i++) #define repr(i, n) for (int i = (n) - 1; i >= 0; i--) #define range(a) a.begin(), a.end() using namespace std; using ll = long long; void chmin(int &x, int y) { x = min(x, y); } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); string S; cin >> S; const int N = S.size(); reverse(range(S)); constexpr int INF = 1e9; vector dp_borrow(N + 1, INF); vector dp_carry(N + 1, INF); vector dp_zero(N + 1, INF); dp_zero[0] = 0; rep(i, N) { if (S[i] == '0') { chmin(dp_zero[i + 1], dp_borrow[i] + 1); chmin(dp_borrow[i + 1], dp_borrow[i] + 1); chmin(dp_zero[i + 1], dp_zero[i]); chmin(dp_zero[i + 1], dp_carry[i] + 1); chmin(dp_carry[i + 1], dp_carry[i] + 1); } else { chmin(dp_zero[i + 1], dp_borrow[i]); chmin(dp_zero[i + 1], dp_zero[i] + 1); chmin(dp_carry[i + 1], dp_zero[i] + 1); chmin(dp_carry[i + 1], dp_carry[i]); chmin(dp_zero[i + 1], dp_carry[i] + 1); } } cout << dp_zero[N] << endl; }