#include using namespace std; typedef long long int ll; typedef double ld; typedef pair ii; typedef vector vi; #define PB push_back() #define ff first #define ss second #define MP make_pair #define FOR(p,a,b) for(ll p = (a); p < (ll)(b); ++p) #define F(a) FOR(i, 0, a) #define FF(a) FOR(j, 0, a) #define EPS (1e-10) #define EQ(a,b) (fabs(a-b) <= fabs(a-b)*EPS) #define DEB(x) cerr << " >>> " << #x << " : " << x << "\n" string soused(string str, int posun) { string n(str); FOR(i,posun,n.size()) if(str[i-posun] == '1') n[i] = '1'; return n; } bool jednicky(string str) { F(str.size()) if(str[i] == '0') return false; return true; } int main() { ios::sync_with_stdio(false); string str, tmp; cin >> str; if(jednicky(str)) { cout << "0\n"; return 0; } if(str[0] == '0') { cout << "-1\n"; return 0; } unordered_set veFronte; queue > fronta; fronta.push(MP(str,0)); veFronte.insert(str); while(!fronta.empty()) { auto a = fronta.front(); fronta.pop(); if(a.ss >= 5) { cout << "6\n"; return 0; } FOR(i,1,21) { tmp = soused(a.ff, i); if(!veFronte.insert(tmp).ss) continue; if(jednicky(tmp)) { cout << a.ss+1 << "\n"; return 0; } fronta.push(MP(tmp,a.ss+1)); } } return 0; }