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: Wrong Answer)

#include <stdio.h>

int main(void){
  int N,M;
  scanf("%d%d",&N,&M);


  int ans[9] = {0,0,0,0,0,0,0,0,0};
  int flag[9] = {0,0,0,0,0,0,0,0,0};
  int pointdata[9] = {2,5,5,4,5,6,3,7,6};
  int numdata[9] = {1,7,4,5,3,2,9,6,8};

  int A;
  for(int i = 0;i < M;i++){
    scanf("%d",&A);
    flag[A-1] = 1;
  }

  int point,num;
  for(int i = 0;i < 9;i++){
    printf("%d\n",numdata[i]-1);

    if(flag[numdata[i]-1]){
      num = numdata[i];
      point = pointdata[num-1];
      break;
    }
  }

  ans[num-1] += N/point-1;
  N -= point*(N/point-1);

  while(N != 0){
    int f = 0;
    if(flag[7] && N >= 7 && num != 8){
      ans[7]++;
      N -= 7;
      f = 1;
    }else if(flag[8] && N >= 6 && num != 9){
      ans[8]++;
      N -= 6;
      f = 1;
    }else if(flag[5] && N >= 6 && num != 6){
      ans[5]++;
      N -= 6;
      f = 1;
    }else if(flag[4] && N >= 5 && num != 5){
      ans[4]++;
      N -= 5;
      f = 1;
    }else if(flag[2] && N >= 5 && num != 3){
      ans[2]++;
      N -= 5;
      f = 1;
    }else if(flag[1] && N >= 5 && num != 2){
      ans[1]++;
      N -= 5;
      f = 1;
    }else if(flag[3] && N >= 4 && num != 4){
      ans[3]++;
      N -= 4;
      f = 1;
    }else if(flag[6] && N >= 3 && num != 7){
      ans[6]++;
      N -= 3;
      f = 1;
    }else if(flag[0] && N >= 2 && num != 1){
      ans[0]++;
      N -= 2;
      f = 1;
    }
    if(!f){
      N += point;
      ans[num-1]--;
    }
  }

  for(int i = 9;i >= 0;i--){
    while(ans[i] > 0){
      printf("%d",i+1);
      ans[i]--;
    }
  }
  printf("\n");

  return 0;
}