n = int(input())
S = [int(i) for i in input().split()]
infty = 10**10
cnt = 0
def merge(A, left, mid, right):
    n1 = mid - left
    n2 = right - mid
    
#     L = [0] * (n1 + 1)
#     R = [0] * (n2 + 1)
#     for i in range(n1):
#         L[i] = A[left + i]
#     for i in range(n2):
#         R[i] = A[mid + i]
# #     L = [A[left + i] for i in range(n1)]
# #     R = [A[mid + i] for i in range(n2)]

#     L[n1] = infty 
#     R[n2] = infty
    
    L = A[left:mid] + [infty]
    R = A[mid:right] + [infty]

    
    i = 0
    j = 0
    for k in range(left, right):
        global cnt
        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 = int((left + right)/2)
        mergeSort(A, left, mid)
        mergeSort(A, mid, right)
        merge(A, left, mid, right)
mergeSort(S, 0, len(S))
print(" ".join([str(st) for st in S]))
print(cnt) n = int(input()) n int(input()) int input() input int(i) for i in input().split() for i in input().split() i input().split() ().split () input split for i in input().split() int(i) int i S = [int(i) for i in input().split()] S [int(i) for i in input().split()] infty = 10**10 infty 10**10 10 10 cnt = 0 cnt 0 def merge(A, left, mid, right):
    n1 = mid - left
    n2 = right - mid
    
#     L = [0] * (n1 + 1)
#     R = [0] * (n2 + 1)
#     for i in range(n1):
#         L[i] = A[left + i]
#     for i in range(n2):
#         R[i] = A[mid + i]
# #     L = [A[left + i] for i in range(n1)]
# #     R = [A[mid + i] for i in range(n2)]

#     L[n1] = infty 
#     R[n2] = infty
    
    L = A[left:mid] + [infty]
    R = A[mid:right] + [infty]

    
    i = 0
    j = 0
    for k in range(left, right):
        global cnt
        cnt += 1
        if(L[i] <= R[j]):
            A[k] = L[i]
            i += 1
        else:
            A[k] = R[j]
            j += 1
             merge n1 = mid - left n1 mid - left mid left n2 = right - mid n2 right - mid right mid L = A[left:mid] + [infty] L A[left:mid] + [infty] A[left:mid] A left:mid left mid [infty] infty R = A[mid:right] + [infty] R A[mid:right] + [infty] A[mid:right] A mid:right mid right [infty] infty i = 0 i 0 j = 0 j 0 for k in range(left, right):
        global cnt
        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 global cnt 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 = int((left + right)/2)
        mergeSort(A, left, mid)
        mergeSort(A, mid, right)
        merge(A, left, mid, right) mergeSort if (left + 1 < right):
        mid = int((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 = 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 mergeSort(S, 0, len(S)) mergeSort S 0 len(S) len S str(st) for st in S for st in S st S for st in S str(st) str st print(" ".join([str(st) for st in S])) print " ".join([str(st) for st in S]) " ".join " " join [str(st) for st in S] print(cnt) print cnt cnt = 0 0 cnt 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) 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) mergeSort S = [int(i) for i in input().split()] [int(i) for i in input().split()] S infty = 10**10 10**10 infty n = int(input()) int(input()) n def merge(A, left, mid, right):
    n1 = mid - left
    n2 = right - mid
    
#     L = [0] * (n1 + 1)
#     R = [0] * (n2 + 1)
#     for i in range(n1):
#         L[i] = A[left + i]
#     for i in range(n2):
#         R[i] = A[mid + i]
# #     L = [A[left + i] for i in range(n1)]
# #     R = [A[mid + i] for i in range(n2)]

#     L[n1] = infty 
#     R[n2] = infty
    
    L = A[left:mid] + [infty]
    R = A[mid:right] + [infty]

    
    i = 0
    j = 0
    for k in range(left, right):
        global cnt
        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):
    n1 = mid - left
    n2 = right - mid
    
#     L = [0] * (n1 + 1)
#     R = [0] * (n2 + 1)
#     for i in range(n1):
#         L[i] = A[left + i]
#     for i in range(n2):
#         R[i] = A[mid + i]
# #     L = [A[left + i] for i in range(n1)]
# #     R = [A[mid + i] for i in range(n2)]

#     L[n1] = infty 
#     R[n2] = infty
    
    L = A[left:mid] + [infty]
    R = A[mid:right] + [infty]

    
    i = 0
    j = 0
    for k in range(left, right):
        global cnt
        cnt += 1
        if(L[i] <= R[j]):
            A[k] = L[i]
            i += 1
        else:
            A[k] = R[j]
            j += 1
             merge
n = int(input())
S = [int(i) for i in input().split()]
infty = 10**10
cnt = 0
def merge(A, left, mid, right):
    n1 = mid - left
    n2 = right - mid
    
#     L = [0] * (n1 + 1)
#     R = [0] * (n2 + 1)
#     for i in range(n1):
#         L[i] = A[left + i]
#     for i in range(n2):
#         R[i] = A[mid + i]
# #     L = [A[left + i] for i in range(n1)]
# #     R = [A[mid + i] for i in range(n2)]

#     L[n1] = infty 
#     R[n2] = infty
    
    L = A[left:mid] + [infty]
    R = A[mid:right] + [infty]

    
    i = 0
    j = 0
    for k in range(left, right):
        global cnt
        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 = int((left + right)/2)
        mergeSort(A, left, mid)
        mergeSort(A, mid, right)
        merge(A, left, mid, right)
mergeSort(S, 0, len(S))
print(" ".join([str(st) for st in S]))
print(cnt)
