首先375=3125375=3*125对于3,我们知道一个很显然的结论:每位数字和相加能被3整除那整个数也能被3整除,对于125,我们发现只要末尾是125的倍数就行,所以它实际上是8个数为循环。\\ 所以我们只需要定义一个ss数组来表示8种情况,然后每次枚举当前第i种情况是否合法,如果合法就直接输出即可,当然我们枚举的时候因为不能有前导0所以我们需要把8个数中有0的先枚举;其次对于输出全是0的情况我们应该先判掉输出-1。

//#pragma GCC optimize(2)
//#pragma GCC optimize(3,"Ofast","inline")
# include<iostream>
# include<iomanip>
# include<algorithm>
# include<cmath>
# include<cstdio>
# include<set>
# include<stack>
# include<queue> 
# include<map>
# include<string>
# include<cstring> 
//# include<unordered_map>

# define eps 1e-9
# define fi first
# define se second
# define ll long long
# define int ll
// cout<<fixed<<setprecision(n) 
using namespace std;
   
typedef unsigned long long ull;
typedef pair<int,int > PII; 
const int mod=998244353;
const int MAX=3e5+10;
const int Time=86400;
const int X=131;
const int inf=0x3f3f3f3f;
const double PI = 1e-4;
double pai = 3.14159265358979323846; 

int T,n,m,H,res;
string s[8]={"000","250","500","750","125","375","625","875"};
int  sum[10];
void solve(){
      int cnt = 0;
	  string st;
	  cin >> st;
	  n = st.size();
	  for(int i = 0 ; i < n ; i ++ ){
	  	  sum[st[i]-'0']++;
	  	  res+=st[i]-'0';
          if(st[i] == '0') cnt++;
	  }
	  if(res % 3 != 0 || cnt == n){ //不能被3整除 或者 全为0
	  	 cout<<"-1";
	  	 return ;
	  }
    for(int i = 0; i<8; i++){ //枚举8种情况
        for(int j = 0; j<3; j++){ //对于第i种情况默认可以构造,那就把他构造到末尾
            sum[s[i][j] - '0']--; //所以要先减3个
        }
        bool flag = 1;
        for(int j = 0; j<=9; j++){ //判断这种构造方法是否合理
            if(sum[j]<0){
                flag = 0;
                break;
            }
        }
        if(flag){ //合理就从大到小输出
            for(int j=9;j>=0;j--)while(sum[j])cout<<j,sum[j]--;
            cout<<s[i];
            return ;
        }//不合理就把原来减的值加回去
        for(int j = 0; j<3; j++){
            sum[s[i][j] - '0']++;
        }
    }
	  cout<<"-1";//8种情况都不行就输出-1
}

signed main(){  
    std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    //cin >> T;
    T = 1;
    while(T--){
		solve();
	} 
    return 0; 
}