#include using namespace std; typedef long double ld; typedef long long lli; typedef pair ii; typedef pair dd; typedef vector vi; typedef vector vii; typedef vector vd; typedef vector> vvi; int solve(vector> &dp, int N, int i, int best, int res) { cout << dp[res][i] << " " << res << " " << best << " " << i << endl; if (res >= best) return best; if (dp[res][i] == '0') return best; else { int k = 1; while(i + k < N && dp[res][i+k] == '1') ++k; if (i + k >= N) return res; cout << i << " k=" << k << endl; for(int K = 1; K <= k; ++K) { for(int i = 0; i < N; ++i) dp[res+1][i] = dp[res][i]; for(int l = 0; l < N; ++l) { if (l + K < N && dp[res][l] == '1') dp[res+1][l+K] = '1'; cout << dp[res+1][l] << endl; } best = min(best, solve(dp, N, i+k+K-1, best, res+1)); } } return best; } int solve2(string &S, int N) { bool solved = true; for(int i = 0; i < S.length(); ++i) if (S[i] == '0') { solved = false; } if (solved) return 0; int best = 0, bestk = 0; for(int k = 1; k < N; ++k) { int c = 0; for(int l = 0; l < S.length(); ++l) { if (S[l] == '1' && l + k < N) if (S[l+k] == '0') { c++; } } if (c > best) { bestk = k; best = c; } } //cout << bestk << endl; string S2(S); for(int l = 0; l < S.length(); ++l) { if (S[l] == '1' && l + bestk < N) S2[l + bestk] = '1'; } return 1 + solve2(S2, N); } int main(int argc, char** argv) { ios::sync_with_stdio(false); string S; cin >> S; // vector> dp(50, vector(50)); // for(int i = 0; i < S.length(); ++i) dp[0][i] = S[i]; // int res = solve(dp, S.length(), 0, 1000, 0); // if (res == 1000) cout << -1 << endl; // else cout << res << endl; if (S[0] == '0') { cout << -1 << endl; } else { cout << solve2(S, S.length()) << endl; } return 0; }