#include #define FOR(n, a, b) for(size_t n = (a); n < (b); ++n) #define ALL(x) x.begin(), x.end() #define pb push_back #define st first #define nd second using namespace std; typedef long long ll; typedef pair pint; typedef vector vi; typedef vector vvi; typedef vector vii; unsigned long long n; string s; int first_zero(bitset<40> b) { for(int i = s.size() - 1; i >= 0; --i) { if(b[i] == 0) return s.size() - 1 - i; } return -1; } int solve(bitset<40> b, int max_depth) { int k = first_zero(b); if(k == -1) return 0; if(k >= 20) return 1; if(max_depth == 1) return max_depth; int min_d = max_depth; for(int i = 1; i <= k; i++) { min_d = min(min_d, solve(b | b>>i, max_depth-1)); } return min_d + 1; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> s; bitset<40> b(s); // cout << first_zero(b) << '\n'; n = s.size(); int offset = 0; if(b[n-1] == 0) { cout << -1 << '\n'; return 0; } if(n > 1 && b[n-2] == 0) { b = b | b>>1; offset = 1; } cout << solve(b, 5) + offset << '\n'; // cout << check(s) << '\n'; return 0; }