#include int bity[256]; int bitov(unsigned long long n){ int s=0; for(int i=0;i<64;i+=8){ s += bity[ (n>>i) & 255 ]; } return s; } void vypis(unsigned long long n){ for(int i=63;i>=0;i--){ printf("%d", (n>>i)&1); } printf("\n"); } int main(){ for(int i=0;i<256;i++){ bity[i]=0; for(int j=0;j<8;j++){ bity[i] += (i>>j)&1; } } unsigned long long masky[64]; //={ for(int i=1; i<64; i++){ masky[i] = (masky[i-1] << 1) | 1; } unsigned long long cislo=0; char blbost[250]; scanf("%s", blbost); char *ptr=blbost; if(*ptr=='0'){ printf("-1"); return 0; } int jednotky=0; int flag=1; unsigned long long chcene=0; while(*ptr){ chcene <<= 1; chcene |= 1; cislo <<= 1; cislo |= (*ptr - '0'); ptr++; } unsigned long long o=cislo; int k=0; int c=0; while(cislo != chcene){ if(k > 60){ printf("-1\n"); return 0; } unsigned long long best = 0; int mx = 0; for(int i=1;i<41;i++){ if(cislo & masky[i]) continue; unsigned long long v = (cislo >> i) | cislo; unsigned long long r = v & (~cislo); if(bitov(r) > mx){ mx = bitov(r); best = v; } } cislo = best; //vypis(cislo); k++; } printf("%d\n", k); return 0; }