#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
#include <iostream>

using namespace std;
typedef long long ll;
const ll  maxn = 1e3 + 10;
ll n, i, j, k, a, b;
ll vis[maxn];
ll ans[maxn];
ll cnt = 0;
ll arr[maxn];
int main() {
	scanf("%lld", &n);
	i = 0;
	b = 0;
	while (n) {
		a = n % 10;
		arr[i] = a;
		n /= 10;
		i++;
		b += a;
	}
	b = b % 3;
	if (b == 0)
		printf("0");
	else
	{
		if (b == 1)
		{
			if (i == 1)
				printf("-1");
			else {
				ll ok = 0;
				for (j = 0; j < i; j++)
					if (arr[j] % 3 == 1)
						ok = 1;
				ll x = 0;
				for (j = 0; j < i; j++)
					if (arr[j] % 3 == 2)
						x++;
				if (ok == 1)
					printf("1");
				else if (x >= 2 && i >= 3)
				{
					printf("2");
				}
				else
					printf("-1");
			}
		}
		else
		{
			ll ok = 0;
			for (j = 0; j < i; j++) {
				if (arr[j] % 3 == 2)
					ok = 1;
			}
			ll x = 0;
			for (j = 0; j < i; j++) {
				if (arr[j] % 3 == 1)
					x++;
			}
			if (ok == 1 && i >= 2)
				printf("1");
			else if (x >= 2 && i >= 3)
				printf("2");
			else
				printf("-1");
		}
	}
	return 0;
}

#include <iostream>
#include <iomanip>
#include <cmath>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <tuple>
#include <string>
#include <list>
using namespace std;

long long min(long long int a,long long int b){
    if(a>b){
        return b;
    }else{
        return a;
    }
}

long long int max(long long int a,long long int b){
    if(a>b){
        return a;
    }else{
        return b;
    }
}

long long modpow(long long a, long long n, long long mod) {
    long long res = 1;
    while (n > 0) {
        if (n & 1) res = res * a % mod;
        a = a * a % mod;
        n >>= 1;
    }
    return res;
}

// a^{-1} mod を計算する
long long modinv(long long a, long long mod) {
    return modpow(a, mod - 2, mod);
}

void f(vector<vector<int>>& a,vector<vector<int>>& b,int N,int K){
    for(int i=0;i<N-1;i++){
        for(int j=i+1;j<N;j++){
            int l=0;
            for(int k=0;k<N;k++){
                if(a[k][i]+a[k][j]>K){
                    break;
                }
                l+=1;
            }
            if(l==N){
                b[i][j]=1;
                b[j][i]=1;
            }
        }
    }
}

void g(vector<vector<int>>& a,vector<vector<int>>& c,int N,int K){
    for(int i=0;i<N-1;i++){
        for(int j=i+1;j<N;j++){
            int l=0;
            for(int k=0;k<N;k++){
                if(a[i][k]+a[j][k]>K){
                    break;
                }
                l+=1;
            }
            if(l==N){
                c[i][j]=1;
                c[j][i]=1;
            }
        }
    }
}

int h(vector<vector<int>>& b,vector<int>& x,int N){
    int M=1;
    vector<int> a(N);
    for(int i=0;i<N;i++){
        a[i]=0;
    }
    stack<int> d;
    for(int i=0;i<N;i++){
        int j=0;
        if(a[i]==0){
            d.push(i);
            a[i]=1;
        }
        while(!d.empty()){
            int k=d.top();
            d.pop();
            j+=1;
            for(int l=0;l<N;l++){
                if(b[k][l]==1 && a[l]==0){
                    d.push(l);
                    a[l]=1;
                }
            }
        }
        if(j>1){
            x.push_back(j);
            M=max(M,j);
        }
    }
    return M;
}



int main(){
    long long int N;
    int max=-1;
    int ans=-1;
    cin>>N;
    vector<long long int> A;
    while(N!=0){
        A.push_back(N%10);
        N=N/10;
    }
    int M=A.size();
    for(long long int k=0;k<(1<<M);k++){
        int S=0;
        int l=0;
        for(int i=0;i<M;i++){
            if(k&(1<<i)){
                l+=1;
                S+=A[i];
            }
        }
        if(S%3==0 && l!=0){
            if(l>max){
                max=l;
            }
        }
    }
    if(max>-1){
        ans=M-max;
    }
    cout<<ans<<endl;
    return 0;
}