cnt = 0
INFTY=10**10
def merge_sort(a,left,right):
	if left+1<right:
		mid=(left+right)//2
		merge_sort(a,left,mid)
		merge_sort(a,mid,right)
		merge(a,left,mid,right)

def merge(a,left,mid,right):
	L=a[left:mid]
	R=a[mid:right]
	L.append(INFTY)
	R.append(INFTY)
	global cnt
	i=0
	j=0
	for k in range(left,right):
		cnt+=1
		if L[i] <= R[j]:
			a[k]=L[i]
			i+=1
		else:
			a[k]=R[j]
			j+=1
			
	
n=int(input())
cnt=0
a=list(map(int,input().split()))
merge_sort(a,0,len(a))
print(*a)
print(cnt) cnt = 0 cnt 0 INFTY=10**10 INFTY 10**10 10 10 def merge_sort(a,left,right):
	if left+1<right:
		mid=(left+right)//2
		merge_sort(a,left,mid)
		merge_sort(a,mid,right)
		merge(a,left,mid,right) merge_sort if left+1<right:
		mid=(left+right)//2
		merge_sort(a,left,mid)
		merge_sort(a,mid,right)
		merge(a,left,mid,right) left+1<right left+1 left 1 right mid=(left+right)//2 mid (left+right)//2 left+right left right 2 merge_sort(a,left,mid) merge_sort a left mid merge_sort(a,mid,right) merge_sort a mid right merge(a,left,mid,right) merge a left mid right a a left left right right def merge(a,left,mid,right):
	L=a[left:mid]
	R=a[mid:right]
	L.append(INFTY)
	R.append(INFTY)
	global cnt
	i=0
	j=0
	for k in range(left,right):
		cnt+=1
		if L[i] <= R[j]:
			a[k]=L[i]
			i+=1
		else:
			a[k]=R[j]
			j+=1
			
	 merge L=a[left:mid] L a[left:mid] a left:mid left mid R=a[mid:right] R a[mid:right] a mid:right mid right L.append(INFTY) L.append L append INFTY R.append(INFTY) R.append R append INFTY global cnt i=0 i 0 j=0 j 0 for k in range(left,right):
		cnt+=1
		if L[i] <= R[j]:
			a[k]=L[i]
			i+=1
		else:
			a[k]=R[j]
			j+=1
			
	 k range(left,right) range left right cnt+=1 cnt 1 if L[i] <= R[j]:
			a[k]=L[i]
			i+=1
		else:
			a[k]=R[j]
			j+=1
			
	 L[i] <= R[j] L[i] L i R[j] R j a[k]=L[i] a[k] a k L[i] L i i+=1 i 1 a[k]=R[j] a[k] a k R[j] R j j+=1 j 1 a a left left mid mid right right n=int(input()) n int(input()) int input() input cnt=0 cnt 0 a=list(map(int,input().split())) a list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split merge_sort(a,0,len(a)) merge_sort a 0 len(a) len a print(*a) print *a a print(cnt) print cnt cnt = 0 0 cnt def merge_sort(a,left,right):
	if left+1<right:
		mid=(left+right)//2
		merge_sort(a,left,mid)
		merge_sort(a,mid,right)
		merge(a,left,mid,right) def merge_sort(a,left,right):
	if left+1<right:
		mid=(left+right)//2
		merge_sort(a,left,mid)
		merge_sort(a,mid,right)
		merge(a,left,mid,right) merge_sort def merge(a,left,mid,right):
	L=a[left:mid]
	R=a[mid:right]
	L.append(INFTY)
	R.append(INFTY)
	global cnt
	i=0
	j=0
	for k in range(left,right):
		cnt+=1
		if L[i] <= R[j]:
			a[k]=L[i]
			i+=1
		else:
			a[k]=R[j]
			j+=1
			
	 def merge(a,left,mid,right):
	L=a[left:mid]
	R=a[mid:right]
	L.append(INFTY)
	R.append(INFTY)
	global cnt
	i=0
	j=0
	for k in range(left,right):
		cnt+=1
		if L[i] <= R[j]:
			a[k]=L[i]
			i+=1
		else:
			a[k]=R[j]
			j+=1
			
	 merge a=list(map(int,input().split())) list(map(int,input().split())) a n=int(input()) int(input()) n cnt=0 0 cnt INFTY=10**10 10**10 INFTY
cnt = 0
INFTY=10**10
def merge_sort(a,left,right):
	if left+1<right:
		mid=(left+right)//2
		merge_sort(a,left,mid)
		merge_sort(a,mid,right)
		merge(a,left,mid,right)

def merge(a,left,mid,right):
	L=a[left:mid]
	R=a[mid:right]
	L.append(INFTY)
	R.append(INFTY)
	global cnt
	i=0
	j=0
	for k in range(left,right):
		cnt+=1
		if L[i] <= R[j]:
			a[k]=L[i]
			i+=1
		else:
			a[k]=R[j]
			j+=1
			
	
n=int(input())
cnt=0
a=list(map(int,input().split()))
merge_sort(a,0,len(a))
print(*a)
print(cnt)
