#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; int main() { string N; cin >> N; int len = N.size(); vector A; for (int i = len - 1; i >= 0; --i) { char ch = N[i]; A.push_back(ch - '0'); } A.push_back(0); vector> dp(len + 2, vector(3, 9999999)); dp[0][A[0]] = 0; for (int i = 0; i < len; ++i) { int v = A[i]; int nv = A[i + 1]; if (v == 1) { if (nv == 1) { dp[i + 1][1] = min(dp[i + 1][1], dp[i][1] + 1); dp[i + 1][2] = min(dp[i + 1][2], dp[i][2]); dp[i + 1][2] = min(dp[i + 1][2], dp[i][1] + 1); } else { dp[i + 1][0] = min(dp[i + 1][0], dp[i][1] + 1); dp[i + 1][1] = min(dp[i + 1][1], dp[i][2]); dp[i + 1][1] = min(dp[i + 1][1], dp[i][1] + 1); } } else { if (nv == 1) { dp[i + 1][1] = min(dp[i + 1][1], dp[i][0]); dp[i + 1][2] = min(dp[i + 1][2], dp[i][1] + 1); dp[i + 1][2] = min(dp[i + 1][2], dp[i][2] + 1); } else { dp[i + 1][0] = dp[i][0]; dp[i + 1][0] = min(dp[i + 1][0], dp[i][1] + 1); dp[i + 1][1] = min(dp[i + 1][1], dp[i][2] + 1); } } // fprintf(stderr, "(%d, %d, %d)\n", dp[i + 1][0], dp[i + 1][1], dp[i + 1][2]); } cout << min(dp[len][0], dp[len][1] + 1) << endl; return 0; }