#include #include using namespace std; using ll = long long; int sol = 100; ll bmask = 0, target; void dfs(ll mask, int step) { if (mask == target) { sol = min(sol, step); return; } if (step == 6) return; for (int i = 1; i <= 20; ++i) if ((mask | (mask >> i)) != mask) dfs(mask | (mask >> i), step + 1); } int main() { string str; cin >> str; if (str[0] == '0') return cout << -1, 0; for (int i = 0; str[i]; ++i) bmask = bmask * 2 + str[i] - '0'; target = (1LL << str.size()) - 1; dfs(bmask, 0); cout << sol; /* priority_queue > Q; Q.emplace(__builtin_popcount(bmask), bmask); while (!Q.empty()) { auto p = Q.top(); Q.pop(); ll b = p.second; if (__builtin_popcount(b) == str.size()) }*/ }