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: Accepted)

#include <stdio.h>
int main(void){
  int N,M,f_A[10]={},i_A,i,j;
  scanf("%d %d\n%d",&N,&M,&i);
  f_A[i]=1;
  for(i_A=2;i_A<=M;i_A++){
    scanf(" %d",&i);
    f_A[i]=1;
  }
  if(f_A[1]){
    f_A[1]+=N/2;
    switch(N%2){
    case 1:
      if(f_A[7]){f_A[1]--;f_A[7]++;}
      else if(f_A[5]){f_A[1]-=2;f_A[5]++;}
      else if(f_A[3]){f_A[1]-=2;f_A[3]++;}
      else if(f_A[2]){f_A[1]-=2;f_A[2]++;}
      else if(f_A[8]){f_A[1]-=3;f_A[8]++;}
    }
  }else if(f_A[7]){
    f_A[7]+=N/3;
    switch(N%3){
    case 2:
      if(f_A[5]){f_A[7]--;f_A[5]++;}
      else if(f_A[3]){f_A[7]--;f_A[3]++;}
      else if(f_A[2]){f_A[7]--;f_A[2]++;}
      else if(f_A[4]){f_A[7]-=2;f_A[4]+=2;}
      else if(f_A[8]){f_A[7]-=4;f_A[8]+=2;}
      break;
    case 1:
      if(f_A[4]){f_A[7]--;f_A[4]++;}
      else if(f_A[8]){f_A[7]-=2;f_A[8]++;}
      else if(f_A[5]){f_A[7]-=3;f_A[5]+=2;}
      else if(f_A[3]){f_A[7]-=3;f_A[3]+=2;}
      else if(f_A[2]){f_A[7]-=3;f_A[2]+=2;}
    }
  }else if(f_A[4]){
    f_A[4]+=N/4;
    switch(N%4){
    case 3:
      if(f_A[9]&&f_A[5]){f_A[4]-=2;f_A[9]++;f_A[5]++;}
      else if(f_A[9]&&f_A[3]){f_A[4]-=2;f_A[9]++;f_A[3]++;}
      else if(f_A[9]&&f_A[2]){f_A[4]-=2;f_A[9]++;f_A[2]++;}
      else if(f_A[8]){f_A[4]--;f_A[8]++;}
      else if(f_A[6]&&f_A[5]){f_A[4]-=2;f_A[6]++;f_A[5]++;}
      else if(f_A[6]&&f_A[3]){f_A[4]-=2;f_A[6]++;f_A[3]++;}
      else if(f_A[6]&&f_A[2]){f_A[4]-=2;f_A[6]++;f_A[2]++;}
      else if(f_A[5]){f_A[4]-=3;f_A[5]+=3;}
      else if(f_A[3]){f_A[4]-=3;f_A[3]+=3;}
      else if(f_A[2]){f_A[4]-=3;f_A[2]+=3;}
      break;
    case 2:
      if(f_A[9]){f_A[4]--;f_A[9]++;}
      else if(f_A[6]){f_A[4]--;f_A[6]++;}
      else if(f_A[5]){f_A[4]-=2;f_A[5]+=2;}
      else if(f_A[3]){f_A[4]-=2;f_A[3]+=2;}
      else if(f_A[2]){f_A[4]-=2;f_A[2]+=2;}
      else if(f_A[8]){f_A[4]-=3;f_A[8]+=2;}
      break;
    case 1:
      if(f_A[5]){f_A[4]--;f_A[5]++;}
      else if(f_A[3]){f_A[4]--;f_A[3]++;}
      else if(f_A[2]){f_A[4]--;f_A[2]++;}
      else if(f_A[9]&&f_A[8]){f_A[4]-=3;f_A[9]++;f_A[8]++;}
      else if(f_A[8]&&f_A[6]){f_A[4]-=3;f_A[8]++;f_A[6]++;}
      else if(f_A[8]){f_A[4]-=5;f_A[8]+=3;}
    }
  }else if(f_A[5]){
    f_A[5]+=N/5;
    switch(N%5){
    case 4:
      if(f_A[9]){f_A[5]-=4;f_A[9]+=4;}
      else if(f_A[8]){f_A[5]-=2;f_A[8]+=2;}
      else if(f_A[6]){f_A[5]-=4;f_A[6]+=4;}
      break;
    case 3:
      if(f_A[9]){f_A[5]-=3;f_A[9]+=3;}
      else if(f_A[8]&&f_A[6]){f_A[5]-=2;f_A[8]++;f_A[6]++;}
      else if(f_A[6]){f_A[5]-=3;f_A[6]+=3;}
      else if(f_A[8]){f_A[5]-=5;f_A[8]+=4;}
      break;
    case 2:
      if(f_A[9]){f_A[5]-=2;f_A[9]+=2;}
      else if(f_A[8]){f_A[5]--;f_A[8]++;}
      else if(f_A[6]){f_A[5]-=2;f_A[6]+=2;}
      break;
    case 1:
      if(f_A[9]){f_A[5]--;f_A[9]++;}
      else if(f_A[6]){f_A[5]--;f_A[6]++;}
      else if(f_A[8]){f_A[5]-=4;f_A[8]+=3;}
    }
  }else if(f_A[3]){
    f_A[3]+=N/5;
    switch(N%5){
    case 4:
      if(f_A[9]){f_A[3]-=4;f_A[9]+=4;}
      else if(f_A[8]){f_A[3]-=2;f_A[8]+=2;}
      else if(f_A[6]){f_A[3]-=4;f_A[6]+=4;}
      break;
    case 3:
      if(f_A[9]){f_A[3]-=3;f_A[9]+=3;}
      else if(f_A[8]&&f_A[6]){f_A[3]-=2;f_A[8]++;f_A[6]++;}
      else if(f_A[6]){f_A[3]-=3;f_A[6]+=3;}
      else if(f_A[8]){f_A[3]-=5;f_A[8]+=4;}
      break;
    case 2:
      if(f_A[9]){f_A[3]-=2;f_A[9]+=2;}
      else if(f_A[8]){f_A[3]--;f_A[8]++;}
      else if(f_A[6]){f_A[3]-=2;f_A[6]+=2;}
      break;
    case 1:
      if(f_A[9]){f_A[3]--;f_A[9]++;}
      else if(f_A[6]){f_A[3]--;f_A[6]++;}
      else if(f_A[8]){f_A[3]-=4;f_A[8]+=3;}
    }
  }else if(f_A[2]){
    f_A[2]+=N/5;
    switch(N%5){
    case 4:
      if(f_A[9]){f_A[2]-=4;f_A[9]+=4;}
      else if(f_A[8]){f_A[2]-=2;f_A[8]+=2;}
      else if(f_A[6]){f_A[2]-=4;f_A[6]+=4;}
      break;
    case 3:
      if(f_A[9]){f_A[2]-=3;f_A[9]+=3;}
      else if(f_A[8]&&f_A[6]){f_A[2]-=2;f_A[8]++;f_A[6]++;}
      else if(f_A[6]){f_A[2]-=3;f_A[6]+=3;}
      else if(f_A[8]){f_A[2]-=5;f_A[8]+=4;}
      break;
    case 2:
      if(f_A[9]){f_A[2]-=2;f_A[9]+=2;}
      else if(f_A[8]){f_A[2]--;f_A[8]++;}
      else if(f_A[6]){f_A[2]-=2;f_A[6]+=2;}
      break;
    case 1:
      if(f_A[9]){f_A[2]--;f_A[9]++;}
      else if(f_A[6]){f_A[2]--;f_A[6]++;}
      else if(f_A[8]){f_A[2]-=4;f_A[8]+=3;}
    }
  }else if(f_A[9]){
    f_A[9]+=N/6;
    switch(N%6){
    case 5:
      f_A[9]-=5;
      f_A[8]+=5;
      break;
    case 4:
      f_A[9]-=4;
      f_A[8]+=4;
      break;
    case 3:
      f_A[9]-=3;
      f_A[8]+=3;
      break;
    case 2:
      f_A[9]-=2;
      f_A[8]+=2;
      break;
    case 1:
      f_A[9]-=1;
      f_A[8]+=1;
      break;
    }
  }else if(f_A[6]){
    f_A[9]+=N/6;
    switch(N%6){
    case 5:
      f_A[9]-=5;
      f_A[8]+=5;
      break;
    case 4:
      f_A[9]-=4;
      f_A[8]+=4;
      break;
    case 3:
      f_A[9]-=3;
      f_A[8]+=3;
      break;
    case 2:
      f_A[9]-=2;
      f_A[8]+=2;
      break;
    case 1:
      f_A[9]-=1;
      f_A[8]+=1;
      break;
    }
  }else if(f_A[8]){
    f_A[8]+=N/7;
  }
  for(i=9;i>=1;i--)for(j=0;j<f_A[i]-1;j++)printf("%d",i);
  return 0;
}