F-375

先判断数位和是不是三的倍数,然后无脑做就行了,相当于打一张表,只要统计三位数是125的倍数存不存在就行了,多判断一个三个0的情况

string p;
int sum =0;
int cnt[10];

void print(int a,int b,int c){
    cnt[a]--;cnt[b]--;cnt[c]--;
    rep(i,1,9) {
        rep(j,1,cnt[i]) printf("%d",i);
    }
}
//=================================
int main(){
	cin >> p;
    rep(i,0,p.size()-1){
        sum += (p[i]-'0');
        cnt[p[i]-'0']++;
    }
    bool flag = true;
    if(sum%3==0){
        if((!cnt[5])&&(cnt[0]<2)) flag = false;
        else{
            if(cnt[1]&&cnt[2]&&cnt[5]){
                print(1,2,5);
                printf("125");
                rep(i,1,cnt[0]) printf("%d",0);
            }
            else if(cnt[2]&&cnt[0]&&cnt[5]){
                print(2,5,0);
                printf("250");rep(i,1,cnt[0]) printf("%d",0);
            }
            else if(cnt[3]&&cnt[7]&&cnt[5]){
                print(3,7,5);
                printf("375");rep(i,1,cnt[0]) printf("%d",0);
            }
            else if(cnt[0]>=2&&cnt[5]){
                print(0,0,5);
                printf("500");rep(i,1,cnt[0]) printf("%d",0);
            }
            else if(cnt[6]&&cnt[2]&&cnt[5]){
                print(6,2,5);
                printf("625");rep(i,1,cnt[0]) printf("%d",0);
            }
            else if(cnt[7]&&cnt[0]&&cnt[5]){
                print(7,0,5);
                printf("750");rep(i,1,cnt[0]) printf("%d",0);
            }
            else if(cnt[8]&&cnt[7]&&cnt[5]){
                print(8,7,5);
                printf("875");rep(i,1,cnt[0]) printf("%d",0);
            }
            else if(cnt[0]>=3){
                rep(i,1,9) rep(j,1,cnt[i]) printf("%d",i);
                rep(i,1,cnt[0]) printf("0");
            }
            else flag = false;
        }
    }
    else flag = false;
    if(!flag) puts("-1");
	return 0;
}