import sys
input = sys.stdin.readline
def marge(A, left, right, mid):
    cnt = 0
    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[n1] = 10 ** 9 + 1
    R[n2] = 10 ** 9 + 1
    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
    return cnt
def margesort(A, left, right):
    if left + 1 < right:
        mid = (left + right) // 2
        cnt1 = margesort(A, left, mid)
        cnt2 = margesort(A, mid, right)
        return cnt1 + cnt2 + marge(A, left, right, mid)
    return 0

def main():
    n = int(input())
    A = list(map(int, input().split()))
    cnt = margesort(A, 0, n)
    print(' '.join(list(map(str, A))))
    print(cnt)

if __name__ == '__main__': main() import sys sys input = sys.stdin.readline input sys.stdin.readline sys.stdin sys stdin readline def marge(A, left, right, mid):
    cnt = 0
    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[n1] = 10 ** 9 + 1
    R[n2] = 10 ** 9 + 1
    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
    return cnt marge cnt = 0 cnt 0 n1 = mid - left n1 mid - left mid left n2 = right - mid n2 right - mid right mid L = [0] * (n1 + 1) L [0] * (n1 + 1) [0] 0 n1 + 1 n1 1 R = [0] * (n2 + 1) R [0] * (n2 + 1) [0] 0 n2 + 1 n2 1 for i in range(n1):
        L[i] = A[left + i]
     i range(n1) range n1 L[i] = A[left + i] L[i] L i A[left + i] A left + i left i for i in range(n2):
        R[i] = A[mid + i]
     i range(n2) range n2 R[i] = A[mid + i] R[i] R i A[mid + i] A mid + i mid i L[n1] = 10 ** 9 + 1 L[n1] L n1 10 ** 9 + 1 10 ** 9 10 9 1 R[n2] = 10 ** 9 + 1 R[n2] R n2 10 ** 9 + 1 10 ** 9 10 9 1 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 return cnt cnt A A left left right right mid mid def margesort(A, left, right):
    if left + 1 < right:
        mid = (left + right) // 2
        cnt1 = margesort(A, left, mid)
        cnt2 = margesort(A, mid, right)
        return cnt1 + cnt2 + marge(A, left, right, mid)
    return 0 margesort if left + 1 < right:
        mid = (left + right) // 2
        cnt1 = margesort(A, left, mid)
        cnt2 = margesort(A, mid, right)
        return cnt1 + cnt2 + marge(A, left, right, mid)
     left + 1 < right left + 1 left 1 right mid = (left + right) // 2 mid (left + right) // 2 left + right left right 2 cnt1 = margesort(A, left, mid) cnt1 margesort(A, left, mid) margesort A left mid cnt2 = margesort(A, mid, right) cnt2 margesort(A, mid, right) margesort A mid right return cnt1 + cnt2 + marge(A, left, right, mid) cnt1 + cnt2 + marge(A, left, right, mid) cnt1 + cnt2 cnt1 cnt2 marge(A, left, right, mid) marge A left right mid return 0 0 A A left left right right def main():
    n = int(input())
    A = list(map(int, input().split()))
    cnt = margesort(A, 0, n)
    print(' '.join(list(map(str, A))))
    print(cnt) main 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 = margesort(A, 0, n) cnt margesort(A, 0, n) margesort A 0 n print(' '.join(list(map(str, A)))) print ' '.join(list(map(str, A))) ' '.join ' ' join list(map(str, A)) list map(str, A) map str A print(cnt) print cnt if __name__ == '__main__': main() __name__ == '__main__' __name__ '__main__' def main():
    n = int(input())
    A = list(map(int, input().split()))
    cnt = margesort(A, 0, n)
    print(' '.join(list(map(str, A))))
    print(cnt) def main():
    n = int(input())
    A = list(map(int, input().split()))
    cnt = margesort(A, 0, n)
    print(' '.join(list(map(str, A))))
    print(cnt) main def marge(A, left, right, mid):
    cnt = 0
    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[n1] = 10 ** 9 + 1
    R[n2] = 10 ** 9 + 1
    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
    return cnt def marge(A, left, right, mid):
    cnt = 0
    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[n1] = 10 ** 9 + 1
    R[n2] = 10 ** 9 + 1
    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
    return cnt marge input = sys.stdin.readline sys.stdin.readline input def margesort(A, left, right):
    if left + 1 < right:
        mid = (left + right) // 2
        cnt1 = margesort(A, left, mid)
        cnt2 = margesort(A, mid, right)
        return cnt1 + cnt2 + marge(A, left, right, mid)
    return 0 def margesort(A, left, right):
    if left + 1 < right:
        mid = (left + right) // 2
        cnt1 = margesort(A, left, mid)
        cnt2 = margesort(A, mid, right)
        return cnt1 + cnt2 + marge(A, left, right, mid)
    return 0 margesort
import sys
input = sys.stdin.readline
def marge(A, left, right, mid):
    cnt = 0
    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[n1] = 10 ** 9 + 1
    R[n2] = 10 ** 9 + 1
    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
    return cnt
def margesort(A, left, right):
    if left + 1 < right:
        mid = (left + right) // 2
        cnt1 = margesort(A, left, mid)
        cnt2 = margesort(A, mid, right)
        return cnt1 + cnt2 + marge(A, left, right, mid)
    return 0

def main():
    n = int(input())
    A = list(map(int, input().split()))
    cnt = margesort(A, 0, n)
    print(' '.join(list(map(str, A))))
    print(cnt)

if __name__ == '__main__': main()
