Problem:
Score : 400 points

Problem Statement

Find the largest integer that can be formed with exactly N matchsticks, under the following conditions:

Every digit in the integer must be one of the digits A_1, A_2, ..., A_M (1 \leq A_i \leq 9).

The number of matchsticks used to form digits 1, 2, 3, 4, 5, 6, 7, 8, 9 should be 2, 5, 5, 4, 5, 6, 3, 7, 6, respectively.

Constraints

All values in input are integers.

2 \leq N \leq 10^4

1 \leq M \leq 9

1 \leq A_i \leq 9

A_i are all different.

There exists an integer that can be formed by exactly N matchsticks under the conditions.

Input

Input is given from Standard Input in the following format:

N M
A_1 A_2 ... A_M

Output

Print the largest integer that can be formed with exactly N matchsticks under the conditions in the problem statement.

Sample Input 1

20 4
3 7 8 4

Sample Output 1

777773

The integer 777773 can be formed with 3 + 3 + 3 + 3 + 3 + 5 = 20 matchsticks, and this is the largest integer that can be formed by 20 matchsticks under the conditions.

Sample Input 2

101 9
9 8 7 6 5 4 3 2 1

Sample Output 2

71111111111111111111111111111111111111111111111111

The output may not fit into a 64-bit integer type.

Sample Input 3

15 3
5 4 6

Sample Output 3

654

Solution in C (GCC 5.4.1) (judge verdict: Runtime Error)

#include<stdio.h>

int main(){
	int n,m,i,a[10]={0},j,k,
	ans[10]={0},
	at[10]={10,2,5,5,4,5,6,3,7,6},
	aj[11]={0,1,7,4,3,2,9,5,6,8};
	scanf("%d%d",&n,&m);
	for(i=0;i<m;i++){
		int ab;
		scanf("%d",&ab);
		a[ab]=1;
	}
	int min1[10],c=0;
	for(i=1;i<=10;i++){
		//if(c==2)break;
		if(a[aj[i]]==1)min1[c++]=aj[i];
	}
	for(i=0;i<c;i++)printf("%d\n",min1[i]);
	int dp[1001][10]={0};
	dp[0][0]=1;
	//for(i=0;i<c;i++)dp[min1[i]][0]=1;
	for(i=0;i<1001;i++){
		for(j=0;j<c;j++){
			if(i>=at[min1[j]]&&dp[i-at[min1[j]]][0]>0){
				int tmp=1,king=dp[i][0];
				//for(k=0;k<10;k++)king+=dp[i][k];
				for(k=1;k<10;k++)tmp+=dp[i-at[min1[j]]][k];
				//printf("%d:%d,%d\n",i,tmp,king);
				if(king<tmp){
					for(k=0;k<10;k++){
						dp[i][k]=dp[i-at[min1[j]]][k];
					}
					dp[i][0]++;
					dp[i][min1[j]]++;
				}
			}
		}
	}
	//puts("o");
	for(i=9;i>0;i--){
		//printf("%d\n",dp[5][i]);
		for(k=0;k<dp[n][i];k++)printf("%d",i);
	}
		puts("");
		return 0;
		
}