/*

首先这道题的题意是所给的数中挑选可以被2,5,3同时整除的最大的数
可以不选完,即从中挑选一些,不能有前导零
0时可以;
被2,5整除,必须含有0,当全是0时,只输出一个
被三整除的数的性质 各位数加起来之和也能被3整除,当各位数和%3==2时
删除一个%3余1的 1 4 7
或者删除两个%3余2的 2 5 8
各位数和%3==1 时 同理

另附各种整除性质
被2整除 偶数
被4整除 后两位被4整除即可
被5整除 末位是0或5
被6整除 同时满足偶数和 各位数和被3整除
被7整除 ……
被8整除 后三位被8整除即可
被9整除 各位数和被9整除
如果一个数的末两位数能被4整除,该数能被4整除
如果一个数的末三位数能被8整除,该数能被8整除
如果一个数的末尾是5或0,那么该数能被5整除
如果一个数各位数之和能被3(9)整除,该数能被3(9)整除
参见https://zhidao.baidu.com/question/151751261.html
关于判断7,11,13的整除情况,是将一个多于4位的整数在百位与千位之间分为两截,形成两个数,左边的数原来的千位、万位成为个位、十位(依次类推)。
将这两个新数相减(较大的数减较小的数),所得的差不改变原来数能被7、11、13整除的特性。
这个方法可以连续使用,直到所得的差小于1000为止。
举个例子:判断71858332能否被7、11、13整除,这个数比较大,
将它分成71858、332两个数(右边是三位数)
71858-332=71526
再将71526分成71、526两个数(右边是三位数)
526-71=455
由于455数比原数小得多,
相对来说容易判断455能被7和13整除,不能被11整除,
所以原来的71858332能被7和13整除,不能被11整除

6,10,12,14,15,18这些个数,只要判断他们能不能同时被他们的约数整除就可以了,例如如果判断被6整除,只需要判断它同时能被2,3整除即可

判断被17,19整除暂时没什么好的方法 其实在实际中也不那么需要的

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[20]= {0};
    int b[100005];
    int sum = 0;
    int num;
    int flag1 = 0,flag2 = 0;
    for(int i=1; i<=n; i++)
    {
        scanf("%d",&num);
        sum+=num;
        a[num]++;
    }
    if(a[0]==0)
        printf("-1\n");
    else
    {
         if(sum%3==2)
        {
            if(a[2]>0)
            {
                a[2]--;
                flag1 = 1;
            }
            else if(a[5]>0)
            {
                a[5]--;
                flag1 = 1;
            }
            else if(a[8]>0)
            {
                a[8]--;
                flag1 = 1;
            }
            if(!flag1)
            {
                int top = 2;

                while(a[1]>0&&top>0)
                {
                    a[1]--;
                    top--;

                }
                while(a[4]>0&&top>0)
                {
                    a[4]--;
                    top--;

                }
                while(a[7]>0&&top>0)
                {
                    a[7]--;
                    top--;

                }



            }
        }
        else if(sum%3==1)
        {
            if(a[1]>0)
            {
                a[1]--;
                flag1 = 1;
            }
            else if(a[4]>0)
            {
                a[4]--;
                flag1 = 1;
            }
            else if(a[7]>0)
            {
                a[7]--;
                flag1 = 1;
            }
            if(!flag1)
            {
                int top = 2;

                while(a[2]>0&&top>0)
                {
                    a[2]--;
                    top--;

                }
                while(a[5]>0&&top>0)
                {
                    a[5]--;
                    top--;

                }
                while(a[8]>0&&top>0)
                {
                    a[8]--;
                    top--;

                }



            }
        }

        for(int i=9; i>=1; i--)
        {
            for(int j=1; j<=a[i]; j++)
            {
                printf("%d",i);
                flag2 = 1;
            }

        }
        if(flag2)
            for(int j=1;j<=a[0];j++)
            printf("%d",0);
        else
        printf("0\n");
    }


    return 0;
}