comparison = 0

def merge(A,left,mid,right):
    global comparison
    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] = 1e12
    R[n2] = 1e12

    i = 0
    j = 0

    for k in range(left,right):
        comparison += 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)

def main():
    n = int(input())
    A = list(map(int,input().split()))
    mergesort(A,0,n)
    print(*A)
    print(comparison)

if __name__ == "__main__":
    main() comparison = 0 comparison 0 def merge(A,left,mid,right):
    global comparison
    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] = 1e12
    R[n2] = 1e12

    i = 0
    j = 0

    for k in range(left,right):
        comparison += 1
        if L[i] < R[j]:
            A[k] = L[i]
            i += 1
        else:
            A[k] = R[j]
            j += 1 merge global comparison 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] = 1e12 L[n1] L n1 1e12 R[n2] = 1e12 R[n2] R n2 1e12 i = 0 i 0 j = 0 j 0 for k in range(left,right):
        comparison += 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 comparison += 1 comparison 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 def main():
    n = int(input())
    A = list(map(int,input().split()))
    mergesort(A,0,n)
    print(*A)
    print(comparison) 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 mergesort(A,0,n) mergesort A 0 n print(*A) print *A A print(comparison) print comparison if __name__ == "__main__":
    main() __name__ == "__main__" __name__ "__main__" main() main def merge(A,left,mid,right):
    global comparison
    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] = 1e12
    R[n2] = 1e12

    i = 0
    j = 0

    for k in range(left,right):
        comparison += 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 comparison
    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] = 1e12
    R[n2] = 1e12

    i = 0
    j = 0

    for k in range(left,right):
        comparison += 1
        if L[i] < R[j]:
            A[k] = L[i]
            i += 1
        else:
            A[k] = R[j]
            j += 1 merge comparison = 0 0 comparison def main():
    n = int(input())
    A = list(map(int,input().split()))
    mergesort(A,0,n)
    print(*A)
    print(comparison) def main():
    n = int(input())
    A = list(map(int,input().split()))
    mergesort(A,0,n)
    print(*A)
    print(comparison) main 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
comparison = 0

def merge(A,left,mid,right):
    global comparison
    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] = 1e12
    R[n2] = 1e12

    i = 0
    j = 0

    for k in range(left,right):
        comparison += 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)

def main():
    n = int(input())
    A = list(map(int,input().split()))
    mergesort(A,0,n)
    print(*A)
    print(comparison)

if __name__ == "__main__":
    main()
