/* 문제 : [10610] 30
[input]
(case 1) 30
(case 2) 102
(case 3) 2931
[output]
(case 1) 30
(case 2) 210
(case 3) -1
[설명]
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다.
미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어
30의 배수가 되는 가장 큰 수를 만들고 싶어한다.
미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.
N을 입력받는데 N는 최대 10^5개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.
미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라.
그 수가 존재하지 않는다면, -1을 출력
0이 있는지 확인해야 하며,
0을 제외한 나머지 숫자의 합이 3의 배수인지 확인해야 한다
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector<int> num(10, 0);
string n; // // 미르코가 발견한 양수 N
int sum = 0;
cin >> n;
for (int i = 0; i < n.length(); i++) {
if (!((i == 0) && (n[i] == '0'))) {
num[n[i] - '0']++;
sum += n[i] - '0';
}
if (!n[i + 1])
break;
}
//// 발견한 숫자 중 0을 제외한 숫자가 3의 배수가 아니거나
//// 0이 없으면 30의 배수가 아니므로 -1 출력
if ((sum % 3 != 0) || (num[0] == 0)) {
cout << "-1";
return 0;
}
for (int i = 9; i >= 0; i--) {
for (int k = 0; k < num[i]; k++) {
cout << i;
}
}
return 0;
}