Round #292 (Div. 2)

C. Drazil and Factorial
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Drazil is playing a math game with Varda.

Let's define  for positive integer x as a product of factorials of its digits. For example, .

First, they choose a decimal number a consisting of n digits that contains at least one digit larger than 1. This number may possibly start with leading zeroes. Then they should find maximum positive number x satisfying following two conditions:

1. x doesn't contain neither digit 0 nor digit 1.

2.  = .

Help friends find such number.

Input

The first line contains an integer n (1 ≤ n ≤ 15) — the number of digits in a.

The second line contains n digits of a. There is at least one digit in a that is larger than 1. Number a may possibly contain leading zeroes.

Output

Output a maximum possible integer satisfying the conditions above. There should be no zeroes and ones in this number decimal representation.

Examples
input
4
1234
output
33222
input
3
555
output
555
Note

In the first case, 


这道题的关键之处在于注意到阶乘是可拆分的,然后将输入数字的每一位进行拆分,将拆分结果进行排序,组成答案;

例如4的阶乘可以拆分成3 2 2;6的阶乘可以拆分成5 3;8的阶乘可以拆分为7 2 2 2;9的阶乘可以拆分为7 3 3 2;

#include<iostream>
#include<cstdlib>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<stack>
#include<queue>
#include<iomanip>
#include<map>
#include<functional>
#include<set>
#define pi 3.14159265358979323846
using namespace std;
bool cmp(const char &a,const char &b)
{
    return a>b;
}
int main()
{
    int n;
    scanf("%d",&n);
    char s[20];
    scanf("%s",&s);
    int cur=0;
    char ans[100];
    for(int i=0;i<n;++i)
    {
        if(s[i]=='2')
        {
            ans[cur]='2';
            ++cur;
        }
        else if(s[i]=='3')
        {
            ans[cur]='3';
            ++cur;
        }
        else if(s[i]=='4')
        {
            ans[cur++]='3';
            ans[cur++]='2';
            ans[cur++]='2';
        }
        else if(s[i]=='5')
        {
            ans[cur++]='5';
        }
        else if(s[i]=='6')
        {
            ans[cur++]='5';
            ans[cur++]='3';
        }
        else if(s[i]=='7')
        {
            ans[cur++]='7';
        }
        else if(s[i]=='8')
        {
            ans[cur++]='7';
            ans[cur++]='2';
            ans[cur++]='2';
            ans[cur++]='2';
        }
        else if(s[i]=='9')
        {
            ans[cur++]='7';
            ans[cur++]='3';
            ans[cur++]='3';
            ans[cur++]='2';
        }
    }
    //cout<<ans[0]<<" "<<ans[1]<<" "<<ans[2]<<" "<<ans[3]<<" "<<ans[4]<<endl;
    sort(ans,ans+cur,cmp);
    for(int i=0;i<cur;++i)
        printf("%c",ans[i]);
    printf("\n");
    return 0;
}


你可能感兴趣的:(codeforces)