Description
Drazil is playing a math game with Varda.
Let's define for positive integerx as a product of factorials of its digits. For example,.
First, they choose a decimal number a consisting ofn digits that contains at least one digit larger than1. This number may possibly start with leading zeroes. Then they should find maximum positive numberx 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 ina.
The second line contains n digits of a. There is at least one digit in a that is larger than1. 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.
Sample Input
4 1234
33222
3 555
555
Hint
In the first case,
//@auther yangZongJun
/********************************************//**
Date : 2014/03/08
题目来源:
题 意:
解题思路:找规律
从2!~9!开始分解,分出尽可能多的位数
2! 2!
3! 3!
4! 3!*(2*2!)
5! 5!(因为有5就无法分解了)
6! 5!*(3!)
7! 7!
8! 7!*(3*2!)
9! 7!*(2*3! * 1*2!)
这样分解出尽可能多的位数后就可以从大到小的输出最大的数了
***********************************************/
#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
using namespace std;
int n;
string s;
int arr[8];
const int INF = 2100000000;
int main()
{
// freopen("input.txt", "r", stdin);
while(~scanf("%d", &n))
{
getchar();
cin >> s;
memset(arr, 0, sizeof(arr));
//memset(arr, sizeof(arr), 0);
for(int i = 0; i < n; i++)
{
if(s[i]=='2'){arr[2]++;}
else if(s[i]=='3'){arr[3]++;}
else if(s[i]=='4'){arr[3]++; arr[2]+=2; }
else if(s[i]=='5'){arr[5]++; }
else if(s[i]=='6'){arr[5]++;arr[3]++; }
else if(s[i]=='7'){arr[7]++; }
else if(s[i]=='8'){arr[7]++;arr[2]+=3; }
else if(s[i]=='9'){arr[7]++;arr[3]+=2;arr[2]++; }
}
for(int i = 7; i >= 0; i--)
{
if(arr[i])
{
int n = arr[i];
while(n--)
{
printf("%d", i);
}
}
}
printf("\n");
}
return 0;
}