count = 0
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 merge(A, left, mid, right):
    global count
    n1 = mid -left
    n2 = right - mid
    L = []
    R = []
    for i in range(0, n1):
        L.append(A[left + i])
    for i in range(0, n2):
        R.append(A[mid + i])
    L.append(float("inf"))
    R.append(float("inf"))
    i = 0
    j = 0
    for k in range(left, right):
        count += 1
        if L[i] <= R[j]:
            A[k] = L[i]
            i = i + 1
        else:
            A[k] = R[j]
            j = j + 1
        




if __name__ == "__main__":
    num = int(raw_input())
    num_list = raw_input().strip().split()
    num_list = map(int, num_list)
    mergesort(num_list, 0, len(num_list))
    num_list = map(str, num_list)
    print " ".join(num_list)
    print count count = 0 count 0 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 def merge(A, left, mid, right):
    global count
    n1 = mid -left
    n2 = right - mid
    L = []
    R = []
    for i in range(0, n1):
        L.append(A[left + i])
    for i in range(0, n2):
        R.append(A[mid + i])
    L.append(float("inf"))
    R.append(float("inf"))
    i = 0
    j = 0
    for k in range(left, right):
        count += 1
        if L[i] <= R[j]:
            A[k] = L[i]
            i = i + 1
        else:
            A[k] = R[j]
            j = j + 1
         merge global count n1 = mid -left n1 mid -left mid left n2 = right - mid n2 right - mid right mid L = [] L [] R = [] R [] for i in range(0, n1):
        L.append(A[left + i])
     i range(0, n1) range 0 n1 L.append(A[left + i]) L.append L append A[left + i] A left + i left i for i in range(0, n2):
        R.append(A[mid + i])
     i range(0, n2) range 0 n2 R.append(A[mid + i]) R.append R append A[mid + i] A mid + i mid i L.append(float("inf")) L.append L append float("inf") float "inf" R.append(float("inf")) R.append R append float("inf") float "inf" 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 = i + 1
        else:
            A[k] = R[j]
            j = j + 1
         k range(left, right) range left right count += 1 count 1 if L[i] <= R[j]:
            A[k] = L[i]
            i = i + 1
        else:
            A[k] = R[j]
            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 = i + 1 i i + 1 i 1 A[k] = R[j] A[k] A k R[j] R j j = j + 1 j j + 1 j 1 A A left left mid mid right right if __name__ == "__main__":
    num = int(raw_input())
    num_list = raw_input().strip().split()
    num_list = map(int, num_list)
    mergesort(num_list, 0, len(num_list))
    num_list = map(str, num_list)
    print " ".join(num_list)
    print count __name__ == "__main__" __name__ "__main__" num = int(raw_input()) num int(raw_input()) int raw_input() raw_input num_list = raw_input().strip().split() num_list raw_input().strip().split() ().strip().split ().strip() ().strip () raw_input strip split num_list = map(int, num_list) num_list map(int, num_list) map int num_list mergesort(num_list, 0, len(num_list)) mergesort num_list 0 len(num_list) len num_list num_list = map(str, num_list) num_list map(str, num_list) map str num_list print " ".join(num_list) " ".join " " join num_list print 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 def merge(A, left, mid, right):
    global count
    n1 = mid -left
    n2 = right - mid
    L = []
    R = []
    for i in range(0, n1):
        L.append(A[left + i])
    for i in range(0, n2):
        R.append(A[mid + i])
    L.append(float("inf"))
    R.append(float("inf"))
    i = 0
    j = 0
    for k in range(left, right):
        count += 1
        if L[i] <= R[j]:
            A[k] = L[i]
            i = i + 1
        else:
            A[k] = R[j]
            j = j + 1
         def merge(A, left, mid, right):
    global count
    n1 = mid -left
    n2 = right - mid
    L = []
    R = []
    for i in range(0, n1):
        L.append(A[left + i])
    for i in range(0, n2):
        R.append(A[mid + i])
    L.append(float("inf"))
    R.append(float("inf"))
    i = 0
    j = 0
    for k in range(left, right):
        count += 1
        if L[i] <= R[j]:
            A[k] = L[i]
            i = i + 1
        else:
            A[k] = R[j]
            j = j + 1
         merge num_list = map(int, num_list) map(int, num_list) num_list num_list = raw_input().strip().split() raw_input().strip().split() num_list count = 0 0 count num_list = map(str, num_list) map(str, num_list) num_list num = int(raw_input()) int(raw_input()) num
count = 0
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 merge(A, left, mid, right):
    global count
    n1 = mid -left
    n2 = right - mid
    L = []
    R = []
    for i in range(0, n1):
        L.append(A[left + i])
    for i in range(0, n2):
        R.append(A[mid + i])
    L.append(float("inf"))
    R.append(float("inf"))
    i = 0
    j = 0
    for k in range(left, right):
        count += 1
        if L[i] <= R[j]:
            A[k] = L[i]
            i = i + 1
        else:
            A[k] = R[j]
            j = j + 1
        




if __name__ == "__main__":
    num = int(raw_input())
    num_list = raw_input().strip().split()
    num_list = map(int, num_list)
    mergesort(num_list, 0, len(num_list))
    num_list = map(str, num_list)
    print " ".join(num_list)
    print count