#import time
count=0
def merge(A,left,mid,right):
    global count
    L=A[left:mid]+[2**30]
    R=A[mid:right]+[2**30]

    i=0
    j=0
    for k in range(left,right):
        count+=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 = int((left+right)/2)
        mergeSort(A,left,mid)
        mergeSort(A,mid,right)
        merge(A,left,mid,right)


#start = time.time()

n=int(input())
s=list(map(int,input().split()))
count=0
mergeSort(s,0,n)

print(s[0],end='',sep='')
for i in range(1,n):
    print(" ",s[i],end='',sep='')
print()

print(count)

#end=time.time()-start
#end*=1000
#print ("Time:{0}".format(end) + "[m_sec]")
 count=0 count 0 def merge(A,left,mid,right):
    global count
    L=A[left:mid]+[2**30]
    R=A[mid:right]+[2**30]

    i=0
    j=0
    for k in range(left,right):
        count+=1
        if L[i]<=R[j]:
            A[k]=L[i]
            i+=1
        else:
            A[k]=R[j]
            j+=1 merge global count L=A[left:mid]+[2**30] L A[left:mid]+[2**30] A[left:mid] A left:mid left mid [2**30] 2**30 2 30 R=A[mid:right]+[2**30] R A[mid:right]+[2**30] A[mid:right] A mid:right mid right [2**30] 2**30 2 30 i=0 i 0 j=0 j 0 for k in range(left,right):
        count+=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 count+=1 count 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 = int((left+right)/2)
        mergeSort(A,left,mid)
        mergeSort(A,mid,right)
        merge(A,left,mid,right)


#start = time.time() mergeSort if left+1 < right:
        mid = int((left+right)/2)
        mergeSort(A,left,mid)
        mergeSort(A,mid,right)
        merge(A,left,mid,right)


#start = time.time() left+1 < right left+1 left 1 right mid = int((left+right)/2) mid int((left+right)/2) int (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 n=int(input()) n int(input()) int input() input s=list(map(int,input().split())) s list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split count=0 count 0 mergeSort(s,0,n) mergeSort s 0 n print(s[0],end='',sep='') print s[0] s 0 end='' end '' sep='' sep '' for i in range(1,n):
    print(" ",s[i],end='',sep='') i range(1,n) range 1 n print(" ",s[i],end='',sep='') print " " s[i] s i end='' end '' sep='' sep '' print() print print(count) print count def merge(A,left,mid,right):
    global count
    L=A[left:mid]+[2**30]
    R=A[mid:right]+[2**30]

    i=0
    j=0
    for k in range(left,right):
        count+=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 count
    L=A[left:mid]+[2**30]
    R=A[mid:right]+[2**30]

    i=0
    j=0
    for k in range(left,right):
        count+=1
        if L[i]<=R[j]:
            A[k]=L[i]
            i+=1
        else:
            A[k]=R[j]
            j+=1 merge def mergeSort(A,left,right):
    if left+1 < right:
        mid = int((left+right)/2)
        mergeSort(A,left,mid)
        mergeSort(A,mid,right)
        merge(A,left,mid,right)


#start = time.time() def mergeSort(A,left,right):
    if left+1 < right:
        mid = int((left+right)/2)
        mergeSort(A,left,mid)
        mergeSort(A,mid,right)
        merge(A,left,mid,right)


#start = time.time() mergeSort s=list(map(int,input().split())) list(map(int,input().split())) s n=int(input()) int(input()) n count=0 0 count count=0 0 count
#import time
count=0
def merge(A,left,mid,right):
    global count
    L=A[left:mid]+[2**30]
    R=A[mid:right]+[2**30]

    i=0
    j=0
    for k in range(left,right):
        count+=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 = int((left+right)/2)
        mergeSort(A,left,mid)
        mergeSort(A,mid,right)
        merge(A,left,mid,right)


#start = time.time()

n=int(input())
s=list(map(int,input().split()))
count=0
mergeSort(s,0,n)

print(s[0],end='',sep='')
for i in range(1,n):
    print(" ",s[i],end='',sep='')
print()

print(count)

#end=time.time()-start
#end*=1000
#print ("Time:{0}".format(end) + "[m_sec]")

