#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S, class T> inline S chmin( S & a, T b) {
if ( a> b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
string largestMultipleOfThree( vector< int > & A) {
int i;
int j;
int s = 0 ;
int cnt[ 10 ] = { } ;
string res;
for ( i= ( 0 ) ; i< ( A.size ( ) ) ; i++ ) {
cnt[ A[ i] ] ++ ;
}
for ( i= ( 0 ) ; i< ( 10 ) ; i++ ) {
s + = cnt[ i] * i;
}
if ( s% 3 ! = 0 ) {
for ( i= ( 0 ) ; i< ( 10 ) ; i++ ) {
if ( cnt[ i] && ( s- i) % 3 == 0 ) {
break ;
}
}
if ( i < 10 ) {
cnt[ i] -- ;
}
else {
for ( i= ( 0 ) ; i< ( 10 ) ; i++ ) {
for ( j= ( 0 ) ; j< ( i+ 1 ) ; j++ ) {
if ( ( s- i- j) % 3 == 0 && cnt[ i] && cnt[ j] && ( i! = j || cnt[ i] >= 2 ) ) {
goto xr20shxY;
}
}
}
xr20shxY:;
if ( i== 10 ) {
return "" ;
}
cnt[ i] -- ;
cnt[ j] -- ;
}
}
{
int KrdatlYV;
int ao_dF3pO;
if ( 10 == 0 ) {
ao_dF3pO = 0 ;
}
else {
ao_dF3pO = cnt[ 0 ] ;
for ( KrdatlYV= ( 1 ) ; KrdatlYV< ( 10 ) ; KrdatlYV++ ) {
ao_dF3pO + = cnt[ KrdatlYV] ;
}
}
s = ao_dF3pO;
}
if ( s== cnt[ 0 ] ) {
chmin( cnt[ 0 ] , 1 ) ;
}
for ( i= ( 10 ) - 1 ; i>= ( 0 ) ; i-- ) {
int APIVbQlN;
for ( APIVbQlN= ( 0 ) ; APIVbQlN< ( cnt[ i] ) ; APIVbQlN++ ) {
res + = ( char ) ( '0' + i) ;
}
}
return res;
}
}
;
// cLay varsion 20200227-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// string largestMultipleOfThree(vector<int>& A) {
// int i, j, s = 0, cnt[10] = {};
// string res;
// rep(i,A.size()) cnt[A[i]]++;
// rep(i,10) s += cnt[i] * i;
//
// if(s%3!=0){
// rep(i,10) if(cnt[i] && (s-i)%3==0) break;
// if(i < 10){
// cnt[i]--;
// } else {
// rep(i,10) rep(j,i+1) if((s-i-j)%3==0 && cnt[i] && cnt[j] && (i!=j || cnt[i]>=2)) break_break;
// if(i==10) return "";
// cnt[i]--;
// cnt[j]--;
// }
// }
//
// s = sum(cnt(10));
// if(s==cnt[0]) cnt[0] <?= 1;
// rrep(i,10) rep(cnt[i]) res += (char)('0'+i);
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIGNobWluKFMgJmEsIFQgYil7CiAgaWYoYT5iKXsKICAgIGE9YjsKICB9CiAgcmV0dXJuIGE7Cn0KI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgc3RyaW5nIGxhcmdlc3RNdWx0aXBsZU9mVGhyZWUodmVjdG9yPGludD4mIEEpewogICAgaW50IGk7CiAgICBpbnQgajsKICAgIGludCBzID0gMDsKICAgIGludCBjbnRbMTBdID0ge307CiAgICBzdHJpbmcgcmVzOwogICAgZm9yKGk9KDApO2k8KEEuc2l6ZSgpKTtpKyspewogICAgICBjbnRbQVtpXV0rKzsKICAgIH0KICAgIGZvcihpPSgwKTtpPCgxMCk7aSsrKXsKICAgICAgcyArPSBjbnRbaV0gKiBpOwogICAgfQogICAgaWYocyUzIT0wKXsKICAgICAgZm9yKGk9KDApO2k8KDEwKTtpKyspewogICAgICAgIGlmKGNudFtpXSAmJiAocy1pKSUzPT0wKXsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZihpIDwgMTApewogICAgICAgIGNudFtpXS0tOwogICAgICB9CiAgICAgIGVsc2V7CiAgICAgICAgZm9yKGk9KDApO2k8KDEwKTtpKyspewogICAgICAgICAgZm9yKGo9KDApO2o8KGkrMSk7aisrKXsKICAgICAgICAgICAgaWYoKHMtaS1qKSUzPT0wICYmIGNudFtpXSAmJiBjbnRbal0gJiYgKGkhPWogfHwgY250W2ldPj0yKSl7CiAgICAgICAgICAgICAgZ290byB4cjIwc2h4WTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB4cjIwc2h4WTo7CiAgICAgICAgaWYoaT09MTApewogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBjbnRbaV0tLTsKICAgICAgICBjbnRbal0tLTsKICAgICAgfQogICAgfQogICAgewogICAgICBpbnQgS3JkYXRsWVY7CiAgICAgIGludCBhb19kRjNwTzsKICAgICAgaWYoMTA9PTApewogICAgICAgIGFvX2RGM3BPID0gMDsKICAgICAgfQogICAgICBlbHNlewogICAgICAgIGFvX2RGM3BPID0gY250WzBdOwogICAgICAgIGZvcihLcmRhdGxZVj0oMSk7S3JkYXRsWVY8KDEwKTtLcmRhdGxZVisrKXsKICAgICAgICAgIGFvX2RGM3BPICs9IGNudFtLcmRhdGxZVl07CiAgICAgICAgfQogICAgICB9CiAgICAgIHMgPWFvX2RGM3BPOwogICAgfQogICAgaWYocz09Y250WzBdKXsKICAgICAgY2htaW4oY250WzBdLCAxKTsKICAgIH0KICAgIGZvcihpPSgxMCktMTtpPj0oMCk7aS0tKXsKICAgICAgaW50IEFQSVZiUWxOOwogICAgICBmb3IoQVBJVmJRbE49KDApO0FQSVZiUWxOPChjbnRbaV0pO0FQSVZiUWxOKyspewogICAgICAgIHJlcyArPSAoY2hhcikoJzAnK2kpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KfQo7Ci8vIGNMYXkgdmFyc2lvbiAyMDIwMDIyNy0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGNsYXNzIFNvbHV0aW9uIHsKLy8gcHVibGljOgovLyAgIHN0cmluZyBsYXJnZXN0TXVsdGlwbGVPZlRocmVlKHZlY3RvcjxpbnQ+JiBBKSB7Ci8vICAgICBpbnQgaSwgaiwgcyA9IDAsIGNudFsxMF0gPSB7fTsKLy8gICAgIHN0cmluZyByZXM7Ci8vICAgICByZXAoaSxBLnNpemUoKSkgY250W0FbaV1dKys7Ci8vICAgICByZXAoaSwxMCkgcyArPSBjbnRbaV0gKiBpOwovLyAKLy8gICAgIGlmKHMlMyE9MCl7Ci8vICAgICAgIHJlcChpLDEwKSBpZihjbnRbaV0gJiYgKHMtaSklMz09MCkgYnJlYWs7Ci8vICAgICAgIGlmKGkgPCAxMCl7Ci8vICAgICAgICAgY250W2ldLS07Ci8vICAgICAgIH0gZWxzZSB7Ci8vICAgICAgICAgcmVwKGksMTApIHJlcChqLGkrMSkgaWYoKHMtaS1qKSUzPT0wICYmIGNudFtpXSAmJiBjbnRbal0gJiYgKGkhPWogfHwgY250W2ldPj0yKSkgYnJlYWtfYnJlYWs7Ci8vICAgICAgICAgaWYoaT09MTApIHJldHVybiAiIjsKLy8gICAgICAgICBjbnRbaV0tLTsKLy8gICAgICAgICBjbnRbal0tLTsKLy8gICAgICAgfQovLyAgICAgfQovLyAKLy8gICAgIHMgPSBzdW0oY250KDEwKSk7Ci8vICAgICBpZihzPT1jbnRbMF0pIGNudFswXSA8Pz0gMTsKLy8gICAgIHJyZXAoaSwxMCkgcmVwKGNudFtpXSkgcmVzICs9IChjaGFyKSgnMCcraSk7Ci8vICAgICByZXR1cm4gcmVzOwovLyAgIH0KLy8gfTsK