#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
#define int long long
ll moved(ll state, ll k){
	return state|(state>>k);
}

main(){
	
	unordered_map<ll,int> distance;
	string S;
	cin>>S;
	int maxK=S.length();
	if(S[0]=='0'){
		cout<<-1<<endl;
		return 0;
	}
	ll starting_state=0LL;
	ll ending_state= (1LL<<maxK)-1LL;
	for(auto x:S){
		starting_state<<=1;
		if(x=='1'){
			starting_state++;
		}
	}
	distance[starting_state]=0;
	queue<int> Q;
	Q.push(starting_state);
	if(starting_state==ending_state){
		cout<<0<<endl;
		return 0;
	}
	while(!Q.empty()){
		auto x=Q.front();
		Q.pop();
		auto xDistance=distance[x];
		for(int i=1;i<maxK;i++){
			auto neigh=moved(x,i);
			if(distance.count(neigh)==0){
				distance[neigh]=xDistance+1;
				Q.push(neigh);
				if(neigh==ending_state)
				{
					cout<<distance[neigh]<<endl;
					return 0;
				}
			}
		}
	}
}
