#include #include int _len(char* tab){ int j = 0; while(tab[j] != '\0'){ j++; } return j; } int ones(char* tab, int len){ int j = 0; while(tab[j] == '1' && j < len){ j++; } return j; } char myor(char a, char b){ if(a == '1' || b == '1') return '1'; return '0'; } void shift(char* s1, char* s, int len, int k){ for(int i = len - k - 1;; --i){ if(i < 0) break; s1[i + k] = myor(s[i], s[i + k]); } for(int j = 0; j < k; ++j){ s1[j] = s[j]; } } int f(int iter, int low, int mini, int len, char* s){ if (mini < iter){ return mini; } int up = ones(s, len); if (up == len){ return iter; } //printf("%d", up); for (int i = low; i < up + 1; ++i){ char s1[40]; shift(s1, s, len, i); //printf("\n%s\n", s1); int tmp = f(iter + 1, i, mini, len, s1); if (tmp < mini){ mini = tmp; } } return mini; } int main(){ char inp[40]; scanf("%s", inp); int len = _len(inp); if (inp[0] == '0'){ printf("%d", -1); return 0; } printf("%d\n", f(0, 1, 7, len, inp)); //printf("%d", res); return 0; } /* int main(){ char inp[40]; scanf("%s", inp); int len = _len(inp); int k=0, res=0; if (inp[0] == '0'){ // printf("%d", -1); return 0; } for(;;){ k = ones(inp, len); // printf("%s", inp); if(k == len) break; ++res; // printf(" %d \n", k); for(int i = len - k - 1;; --i){ if(i < 0) break; inp[i + k] = myor(inp[i], inp[i + k]); } } printf("%d", res); return 0; }*/