Drazil is playing a math game with Varda.

Let's define <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/7020b94c48be2ee5b8eeca05f379c8911bb0e7c4.png" style="max-width: 100.0%;max-height: 100.0%;"/> for positive integer *x* as a product of factorials of its digits. For example, <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/6784d861d9a724d0aeddefcb00b7d0c3442ae586.png" style="max-width: 100.0%;max-height: 100.0%;"/>.

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. <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/7020b94c48be2ee5b8eeca05f379c8911bb0e7c4.png" style="max-width: 100.0%;max-height: 100.0%;"/> = <img align="middle" class="tex-formula" src="https://espresso.codeforces.com/aa57e017a6c74d06b0a54bc47e3f6990e5af38c1.png" style="max-width: 100.0%;max-height: 100.0%;"/>.

Help friends find such number.
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.
import os , sys,time, collections , math , pprint , itertools as it , operator as op , bisect as bs ,functools as fn
maxx , localsys , mod = 1<<60, 0 , int(1e9 + 7) 
nCr = lambda n, r: reduce(mul, range(n - r + 1, n + 1), 1) // factorial(r)
ceil = lambda n , x: (n+x -1 )//x 
osi, oso = '/home/priyanshu/Documents/cp/input.txt','/home/priyanshu/Documents/cp/output.txt'
if os.path.exists(osi):
	sys.stdin  = open(osi, 'r') ; sys.stdout = open(oso, 'w')
	
input = sys.stdin.readline
from functools import reduce
def maps():return map(int , input().split())

#THINK ABOUT THE EDGE CASES ..........
def Kth_beautiful_string():
	for _ in range(int(input())):
		n , k = maps() ; arr = ['a']*n
		for i in range(n-1 , -1 , -1):
			if n-i-1 >= k:
				arr[i]=  arr[i + (n-i-1) - (k-1)] ='b'
				print(''.join(arr)) ; break
			k-=n-i-1
	#constantly decrease the number of string whose left most position is at i,because at every ith position (n-i-1) strings exists whose left most position is at i

def div(n):
	se = collections.defaultdict(int)
	while n % 2==0:
		n//=2 ; se[2]+=1
	for i in range(3 , int(n**0.5)+1 , 2):
		while n % i == 0:
			se[i]+=1 ; n//=i
	if n > 1:
		se[n]+=1
	return se
f = math.factorial
n = int(input()) ; ans =[] ;s = [*map(int, input().rstrip('\n'))] ; p = []
for i in s:
	x = div(f(i))
	for j in x:
		while x[j]:
			p.append(j)
			x[j]-=1
p = collections.Counter(p)
# print(p)
# print(div(9))
d = {}
OK = True
while OK :
	for i in range(9,-1,-1):
		if p[i]:
			ok = True
			for j in range(i-1 ,1 ,-1):
				if j == 4 and p[2] >=2 :
					continue
				elif j == 6 and p[3] and p[2]:
					continue
				elif j == 8 and (p[4]>=2 and p[2]>=3):
					continue
				elif j == 9 and p[3]>=2:
					continue
				elif not p[j] :
					ok = False
			if ok:
				for j in range(i-1 ,1 ,-1):
					if j == 4 and p[2] >=2 :
						p[2]-=2
					elif j == 6 and p[3] and p[2]:
						p[3]-=1 ; p[2]-=1
					elif j == 8 and p[2]>=3:
						p[2]-=3							
					elif j == 9 and p[3]>=2:
						p[3]-=2
					else:
						p[j]-=1
				ans.append(i)
				p[i]-=1
				break
	else:
		break
print(*ans,sep='')
