import math

n = int(input())
A = list(map(int, input().split()))
cnt = 0
inf = 10**9



def merge(A,left,mid,right):
	global cnt
	L = A[left:mid] + [inf]
	R = A[mid:right] + [inf]
	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 mergeSort(A,left,right):
	if left + 1 < right:
		mid = (left + right) // 2
		mergeSort(A,left,mid)
		mergeSort(A,mid,right)
		merge(A,left,mid,right)

mergeSort(A,0,n)
print(*A)
print(cnt) import math math n = int(input()) n int(input()) int input() input A = list(map(int, input().split())) A list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split cnt = 0 cnt 0 inf = 10**9 inf 10**9 10 9 def merge(A,left,mid,right):
	global cnt
	L = A[left:mid] + [inf]
	R = A[mid:right] + [inf]
	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 global cnt L = A[left:mid] + [inf] L A[left:mid] + [inf] A[left:mid] A left:mid left mid [inf] inf R = A[mid:right] + [inf] R A[mid:right] + [inf] A[mid:right] A mid:right mid right [inf] inf 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 def mergeSort(A,left,right):
	if left + 1 < right:
		mid = (left + right) // 2
		mergeSort(A,left,mid)
		mergeSort(A,mid,right)
		merge(A,left,mid,right) mergeSort if left + 1 < right:
		mid = (left + right) // 2
		mergeSort(A,left,mid)
		mergeSort(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 mergeSort(A,left,mid) mergeSort A left mid mergeSort(A,mid,right) mergeSort A mid right merge(A,left,mid,right) merge A left mid right A A left left right right mergeSort(A,0,n) mergeSort A 0 n print(*A) print *A A print(cnt) print cnt def mergeSort(A,left,right):
	if left + 1 < right:
		mid = (left + right) // 2
		mergeSort(A,left,mid)
		mergeSort(A,mid,right)
		merge(A,left,mid,right) def mergeSort(A,left,right):
	if left + 1 < right:
		mid = (left + right) // 2
		mergeSort(A,left,mid)
		mergeSort(A,mid,right)
		merge(A,left,mid,right) mergeSort n = int(input()) int(input()) n cnt = 0 0 cnt inf = 10**9 10**9 inf A = list(map(int, input().split())) list(map(int, input().split())) A def merge(A,left,mid,right):
	global cnt
	L = A[left:mid] + [inf]
	R = A[mid:right] + [inf]
	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):
	global cnt
	L = A[left:mid] + [inf]
	R = A[mid:right] + [inf]
	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
import math

n = int(input())
A = list(map(int, input().split()))
cnt = 0
inf = 10**9



def merge(A,left,mid,right):
	global cnt
	L = A[left:mid] + [inf]
	R = A[mid:right] + [inf]
	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 mergeSort(A,left,right):
	if left + 1 < right:
		mid = (left + right) // 2
		mergeSort(A,left,mid)
		mergeSort(A,mid,right)
		merge(A,left,mid,right)

mergeSort(A,0,n)
print(*A)
print(cnt)
