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;
}