#include <bits/stdc++.h>
using namespace std;
string ToStr(int x,int siz){
string r="";
while(siz){
r+=(char)((x%10)+'0');
x/=10;
siz--;
}reverse(r.begin(),r.end());

return r;
}
bool OK(string x){
vector <bool> nok(10,0);
for(int i=0;i<x.size();i++){
    if(nok[x[i]-'0'])return 0;
    if(i>0&&x[i]!=x[i-1])nok[x[i]-'0']=1;
}
return 1;
}
int diff(string a,string b){
    int rez=0;
for(int i=0;i<a.size();i++){
    if(a[i]!=b[i])rez++;
}
return rez;

}
int main(){
string s;
cin >>s;
set <int> dig;
for(int i=0;i<s.size();i++){
    dig.insert(s[i]);

}
int n=s.size();
int d=dig.size();

if(d==2){
int uk=0;
for(int i=0;i<n;i++){
uk+=(s[i]=='1');
}
int rez=min(uk,n-uk);
int cnt=0;
for(int i=0;i<n;i++){
cnt+=(s[i]=='1');
rez=min(rez,cnt+(n-i-1)-(uk-cnt));
rez=min(rez,(i+1-cnt)+uk-cnt);
}
cout <<rez<<endl;
return 0;
}
if(s.size()<=6){
        int rez=1000000;
    for(int i=0;i<=1000000;i++){
       string xx=ToStr(i,s.size());
       if(!OK(xx))continue;
       rez=min(rez,diff(s,xx));
    }
cout <<rez<<endl;
return 0;
}
vector <vector <vector <int> > > DP(s.size()+1,vector <vector <int> > (1<<(d+1),vector <int>(d,100)));

for(int i=0;i<d;i++)
DP[0][0][i]=1;

for(int i=1;i<=n;i++) {

    for(int j=0;j<(1<<d+1);j++){
        for(int k=0;k<d;k++){
            for(int f=0;f<d;f++){
               if(!(1<<f)&j)
               DP[i][j][k]=min(100,min(DP[i][j][k],DP[i-1][j][k]+((f+'0')!=s[i])));
               if(j&(1<<f)){
                DP[i][j][k]=min(100,min(DP[i][j][k],DP[i-1][j-(1<<f)][k]));
               }
            }

        }
    }
}
int rez=100;
 for(int j=0;j<(1<<d+1);j++){
 for(int k=0;k<d;k++){

               rez=min(rez,DP[n][j][k]);
            }

        }
        cout <<rez<<endl;

}