#include using namespace std; #define TRACE(x) cerr << #x << ' ' << x << endl #define FOR(i, a, b) for (int i = (a); i < int(b); i++) #define REP(i, n) FOR(i, 0, n) #define _ << ' ' << typedef long long llint; typedef long long ll; typedef pair pii; #define fi first #define sec second #define pb push_back void fail() { cout << -1; exit(0); } int main() { string s; cin >> s; int n = s.size(); int sol = 0; while(true) { vector ones; REP(i, n) { if(s[i] == '0') { ones.pb(i); } } if(ones.size() == 0) { break; } sol ++; set av; FOR(i, 1, ones[0] + 1) { av.insert(i); } if(av.size() == 0) fail(); int uz = -1; ones.pb(-1); REP(i, ones.size()) { set nav; for(auto j: av) { if(ones[i] - j >= 0 && s[ones[i] - j] == '1') { nav.insert(j); } } if(nav.size() == 0) { uz = *av.begin(); break; } else { av = nav; } } string ns = s; REP(i, n) { if(ns[i] == '0' && s[i - uz] == '1') ns[i] = '1'; } s = ns; } cout << sol << endl; return 0; }