#include <bits/stdc++.h>
using namespace std;
void ckmax(int&a,int b){a=max(a,b);}
void ckmin(int&a,int b){a=min(a,b);}
const int N=100050;
const int inf=1e8;
char s[N];
int dp[N][10][10][2];
int bans=inf,m;
vector<int> digits;
void BT(string s,int pos,int cost,string tmp){
    if(pos==m){
        bool ok=1;
        bool was3[10];
        for(int i=0;i<10;i++)was3[i]=0;
        for(int i=0;i<m;i++){
            int dgt=(int)(s[i]-'0');
            if(i==0)was3[dgt]=1;
            else{
                int dgt2=(int)(s[i-1]-'0');
                if(dgt!=dgt2&&was3[dgt])ok=0;
                was3[dgt]=1;
            }
        }
        int ncost=0;
        for(int i=0;i<m;i++)ncost+=tmp[i]!=s[i];
        if(ok)ckmin(bans,ncost);
        //if(ok)cout<<s<<endl;
        return;
    }
    for(int j:digits){
        s[pos]=(char)('0'+j);
        BT(s,pos+1,cost+j!=(int)(tmp[pos]-'0'),tmp);
    }
}
int main(){
    scanf("%s",&s);
    int n=strlen(s);
    if(n<=6){
        if(n<=2){
            printf("0");
            return 0;
        }
        bool was[10];
        for(int i=0;i<10;i++)was[i]=0;
        for(int i=0;i<n;i++){
            int dgt=(int)s[i]-'0';
            if(!was[dgt])digits.push_back((int)(s[i]-'0')),was[dgt]=1;
        }
        if((int)digits.size()==1){
            printf("0");
            return 0;
        }
        string h="";
        for(int i=0;i<n;i++)h+=s[i];
        m=(int)h.length();BT(h,0,0,h);
        printf("%i",bans);
        return 0;
    }
    bool ok=1;
    for(int i=0;i<n;i++)if(s[i]!='0'&&s[i]!='1')ok=0;
    if(ok){
        int ans=inf,sum=0;
        for(int i=0;i<n;i++)if(s[i]=='1')sum+=1;
        ckmin(ans,sum);ckmin(ans,n-sum);
        int tmp=0;
        for(int i=0;i<n;i++){
            tmp+=s[i]=='1';
            int szl=i+1,szr=n-i-1;
            ckmin(ans,szl-tmp+(sum-tmp));
            ckmin(ans,tmp+szr-(sum-tmp));
            //printf("%i %i\n",tmp,sum-tmp);
        }
        printf("%i",ans);
        return 0;
    }
    //int dp[n][10][10][2];
    for(int i=0;i<n;i++)for(int j=0;j<10;j++)for(int k=0;k<10;k++)for(int l=0;l<2;l++)dp[i][j][k][l]=inf;
    /*for(int i=0;i<n;i++){
        int dgt=(int)(s[i]-'0');
        if(i==0){
            for(int j=0;j<10;j++){
                if(j==dgt){
                    for(int k=0;k<10;k++){
                        if(k==dgt)dp[i][j][k][1]=0;
                        else dp[i][j][k][0]=0;
                    }
                }else{
                    for(int k=0;k<10;k++){
                        if(k==j)dp[i][j][k][1]=1;
                        else dp[i][j][k][0]=1;
                    }
                }
            }
        }else{
            for(int j=0;j<10;j++){
                int diff=0;
                if(j!=dgt)diff=1;
                //printf("%i %i %i\n",i,j,diff);
                for(int k=0;k<10;k++){
                    for(int t=0;t<10;t++){
                        //dp[i][j][t][0]=inf;
                        //dp[i][j][t][1]=inf;
                        if(j==t){
                            if(j==k){
                                ckmin(dp[i][j][t][1],dp[i-1][k][t][1]+diff);
                                ckmin(dp[i][j][t][1],dp[i-1][k][t][0]+diff);
                            }else{
                                //for(int r=0;r<10;r++){
                                //    if(r==j)continue;
                                    ckmin(dp[i][j][t][1],dp[i-1][k][j][0]+diff);
                                //}
                                //dp[i][j][t][1]+=j!=dgt;
                            }
                            continue;
                        }
                        for(int l=0;l<2;l++){
                            if(l==0){
                                if(t!=k){
                                    if(j==k)ckmin(dp[i][j][t][0],dp[i-1][k][t][0]+diff);
                                    else{
                                        if(i==1)ckmin(dp[i][j][t][0],max(dp[i-1][k][t][0],dp[i-1][k][j][0])+diff);
                                        //else
                                    }
                                }
                            }else{
                                if(t==k)ckmin(dp[i][j][t][1],dp[i-1][k][t][1]+diff);
                            }
                            //ckmax(dp[i][j][t][0],dp[i-1][j][j][1]+diff);
                        }
                    }
                }
            }
        }
    }*/
    for(int i=0;i<n;i++){
        int dgt=(int)(s[i]-'0');
        if(i==0){
            //for(int j=0;j<10;j++)dp[i][j]=j!=dgt;
            continue;
        }
        for(int j=0;j<10;j++){
            int dp2[n][10];
            for(int k=0;k<i;k++){
                for(int l=0;l<10;l++){

                }
            }
        }
    }
    int ans=inf;
    /*for(int i=0;i<n;i++){
        for(int j=0;j<10;j++){
            for(int k=0;k<10;k++){
                printf("{%i %i} ",dp[i][j][k][0],dp[i][j][k][1]);
            }
            printf("\n");
        }
        printf("\n");
    }*/
    for(int i=0;i<10;i++)ckmin(ans,dp[n-1][i][i][1]);
    //for(int i=0;i<10;i++)for(int j=0;j<10;j++)for(int k=0;k<10;k++)ckmin(ans,dp[i][j][k][0]);
    printf("%i",ans);
    return 0;
}