如果有两种颜色的珠子个数是奇数个,那么魅力值就是0,任意输出一个串就可以。
否则,魅力值一定是颜色个数的最大公约数。

代码如下:

#include<bits/stdc++.h>
#define lalala printf("lalala\n");
#define N 35
using namespace std;

int n,cnt[N];
int c[N];

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>cnt[i];
    int num=cnt[1];

    int flag=0;
    for(int i=1;i<=n;i++)
    {
        if(cnt[i]&1)
        {
            flag++;
            if(flag==2) break;
        }
    }

    for(int i=2;i<=n;i++) num=__gcd(num,cnt[i]);

    if(flag==2)
    {
        printf("0\n");
        for(int i=1;i<=n;i++){
            if(cnt[i])
            {
                while(cnt[i]--) printf("%c",i+'a'-1);
            }
        }
        printf("\n");
        return 0;
    }

    for(int i=1;i<=n;i++) cnt[i]/=num;

    /*
    for(int i=1;i<=n;i++) printf("%d ",cnt[i]);
    printf("\n");
    */


    printf("%d\n",num);

    flag=0;
    for(int i=1;i<=n;i++){
        if(cnt[i]%2==1){
            flag++;
            if(flag==2) break;
        }
    }

    if(flag==2)
    {
        num/=2;
        while(num--)
        {
        memcpy(c,cnt,sizeof(cnt));
        for(int i=1;i<=n;i++)
        {
            while(c[i])
            {
                printf("%c",'a'+i-1);
                c[i]--;
            }
        }
        memcpy(c,cnt,sizeof(cnt));
        for(int i=n;i>=1;i--)
        {
            while(c[i]){
                printf("%c",'a'+i-1);
                c[i]--;
            }
        }

        }
        cout<<endl;

    }
    else
    {
        //lalala
        while(num--)
        {
            memcpy(c,cnt,sizeof(cnt));
            for(int i=1;i<=n;i++)
            {
                if(c[i]%2==0)
                {
                    c[i]/=2;
                    while(c[i]){
                        printf("%c",'a'+i-1);
                        c[i]--;
                    }
                }
            }
            for(int i=1;i<=n;i++){
                if(c[i]%2)
                {
                    while(c[i]){
                        printf("%c",'a'+i-1);
                        c[i]--;
                    }
                }
            }
            memcpy(c,cnt,sizeof(c));
            for(int i=n;i>=1;i--)
            {
                if(c[i]%2==0)
                {
                    c[i]/=2;
                    while(c[i]){
                        printf("%c",'a'+i-1);
                        c[i]--;
                    }
                }
            }

        }
        printf("\n");
    }
    return 0;
}