#include using namespace std; int main() { string s; cin >> s; int n = s.length(); int goal = 0; for (int i = 0; i < n; i++) { goal <<= 1; if (s[i] == '0') goal++; } unordered_set S[2]; int curr = 0; S[curr].insert(0); if (goal == 0) { cout << 0 << endl; return 0; } for (int d = 1; d <= n; d++) { // work backwards int prev = curr; curr = 1-curr; // no need to clear S[curr] for (auto s : S[prev]) { S[curr].insert(s); int mask = ((1 << d) - 1) << (n-d); for (int i = 0; i < n; i++) { S[curr].insert(s ^ mask); mask >>= 1; } } if (S[curr].count(goal) > 0) { cout << d << endl; return 0; } } return 0; }