Drazil is playing a math game with Varda.

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

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. <image> = <image>.

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, <image>
#include <bits/stdc++.h>
using namespace std;
template <typename OutputIterator>
void input(OutputIterator first, OutputIterator last) {
  while (first != last) cin >> *(first++);
}
template <typename InputIterator>
void output(InputIterator first, InputIterator last, string fs = " ",
            bool newline = 0) {
  while (first != last) cout << *(first++) << fs;
  if (newline) cout << endl;
}
static inline int Rint() {
  struct X {
    int dig[256];
    X() {
      for (int i = '0'; i <= '9'; ++i) dig[i] = 1;
      dig['-'] = 1;
    }
  };
  static X fuck;
  int s = 1, v = 0, c;
  for (; !fuck.dig[c = getchar()];)
    ;
  if (c == '-')
    s = 0;
  else if (fuck.dig[c])
    v = c ^ 48;
  for (; fuck.dig[c = getchar()]; v = v * 10 + (c ^ 48))
    ;
  return s ? v : -v;
}
int n;
vector<int> v;
void deal(int x) {
  if (x <= 1) return;
  if (x == 2)
    v.push_back(2);
  else if (x == 3)
    v.push_back(3);
  else if (x == 4)
    v.push_back(2), v.push_back(3), v.push_back(2);
  else if (x == 5)
    v.push_back(5);
  else if (x == 6)
    v.push_back(5), v.push_back(3);
  else if (x == 7)
    v.push_back(7);
  else if (x == 8)
    v.push_back(2), v.push_back(2), v.push_back(2), v.push_back(7);
  else if (x == 9)
    v.push_back(3), v.push_back(3), v.push_back(2), v.push_back(7);
}
int main() {
  cin >> n;
  getchar();
  while (n--) {
    int c = getchar() - '0';
    deal(c);
  }
  sort(v.begin(), v.end());
  reverse(v.begin(), v.end());
  output(v.begin(), v.end(), "");
  return 0;
}
