#include <bits/stdc++.h>
typedef long long ll;
typedef long double ld;
#define endl                "\n"
#define fi                  first
#define se                  second
#define For(i,a,b)          for(ll i=a;i<b;i++)
#define RFor(i,b,a)         for(ll i = b;i>=a;i--)
#define sz                  size()
#define PQ                  priority_queue
#define len                 length()
#define mll                 map<ll,ll>
#define mpll                map<pll,ll>
#define vll                 vector<ll>
#define sll                 set<ll>
#define vpll                vector<pair<ll,ll> >
#define mp(x,y)             make_pair(x,y)
#define pll                 pair<ll,ll>
#define pb                  push_back
#define pf                  push_front
#define ALL(v)              v.begin(),v.end()
#define print(ans)          cout<<(ans?"YES":"NO")<<endl
#define LAPAK               ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;

const ll MOD = 1e9 + 7;
const ll INF = 2e18;
const int MAX = 1e5+3;


int main(){
LAPAK
    cout<<fixed<<setprecision(15);
    ll tc;
    tc = 1;
    //cin>>tc;
    while(tc--){
        ll n;
        cin>>n;
        ld a[n];
        ll m = 0, c = 0;
        ld e = 0;
        For(i,0,n){
            cin>>a[i];
            m += abs(a[i]);
            c = max(c, abs((ll)a[i]));
            e += (a[i]*a[i]);
        }
        e = sqrt(e);
        cout<<m<<endl<<e<<endl<<c<<endl;
    }
return 0;
}

#include <bits/stdc++.h>
using namespace std;
typedef long long lint;
#define rep(i,n) for(lint (i)=0;(i)<(n);(i)++)
#define repp(i,m,n) for(lint (i)=(m);(i)<(n);(i)++)
#define repm(i,n) for(lint (i)=(n-1);(i)>=0;(i)--)
#define INF (1ll<<60)
#define all(x) (x).begin(),(x).end()
//const lint MOD =1000000007;
const lint MOD=998244353;
const lint MAX = 1000000;
using Graph =vector<vector<lint>>;
typedef pair<lint,lint> P;
typedef map<lint,lint> M;
#define chmax(x,y) x=max(x,y)
#define chmin(x,y) x=min(x,y)

 
lint fac[MAX], finv[MAX], inv[MAX];
 
void COMinit() 
{
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for (lint i = 2; i < MAX; i++)
    {
        fac[i] = fac[i - 1] * i % MOD;
        inv[i] = MOD - inv[MOD % i] * (MOD / i) % MOD;
        finv[i] = finv[i - 1] * inv[i] % MOD;
    }
}
 
long long COM(lint n, lint k)
{
    if (n < k)
        return 0;
    if (n < 0 || k < 0)
        return 0;
    return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}
 
lint primary(lint num)
{
    if (num < 2) return 0;
    else if (num == 2) return 1;
    else if (num % 2 == 0) return 0;
 
    double sqrtNum = sqrt(num);
    for (int i = 3; i <= sqrtNum; i += 2)
    {
        if (num % i == 0)
        {
            return 0;
        }
    }
 
    return 1;
}
   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;
}
    lint lcm(lint a,lint b){
        return a/__gcd(a,b)*b;
    }
     lint gcd(lint a,lint b){
        return __gcd(a,b);
    } 

    int main(){
        string s;
        cin>>s;
        lint now=0;
        lint n=s.size();
        lint a[n];
        rep(i,n){
            lint g=s[i]-'0';
            a[i]=g;
            a[i]%=3;
            now+=g;
        }
        now%=3;
        lint ans=INF;
        if(now==0)ans=0;
        else if(now==1){
            rep(i,n)if(a[i]==1)chmin(ans,1LL);
            lint count=0;
            rep(i,n)if(a[i]==2)count++;
            chmin(count,2LL);
            if(count>=2&&(n-count)>0)chmin(ans,2LL);
        }else if(now==2){
            rep(i,n)if(a[i]==2)chmin(ans,1LL);
            lint count=0;
            rep(i,n)if(a[i]==1)count++;
            chmin(count,2LL);
            if(count>=2&&(n-count)>0)chmin(ans,2LL);

        }
        if(n==1){
            lint g=s[0]-'0';
            if(g%3!=0)ans=INF;
            else ans=0;
        }
        if(ans==INF)cout<<-1<<endl;
        else cout<<ans<<endl;
        

    }
      