import sys

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

if __name__ == "__main__":
    lines = sys.stdin.readlines()
    N = int(lines[0])
    nums = [int(n) for n in lines[1].split(" ")]
    c = 0
    mergeSort(nums, 0, N)
    print " ".join(map(str, nums))
    print c import sys sys def merge(A, left, mid, right):
    n1 = mid - left
    n2 = right - mid
    L = []
    R = []
    for i in range(n1):
        L.append(A[left+i])
    for i in range(n2):
        R.append(A[mid+i])
    L.append("INFTY")
    R.append("INFTY")
    i = 0
    j = 0
    for k in range(left, right):
        if L[i] <= R[j]:
            A[k] = L[i]
            i += 1
        else:
            A[k] = R[j]
            j += 1
        global c
        c += 1 merge n1 = mid - left n1 mid - left mid left n2 = right - mid n2 right - mid right mid L = [] L [] R = [] R [] for i in range(n1):
        L.append(A[left+i])
     i range(n1) range n1 L.append(A[left+i]) L.append L append A[left+i] A left+i left i for i in range(n2):
        R.append(A[mid+i])
     i range(n2) range n2 R.append(A[mid+i]) R.append R append A[mid+i] A mid+i mid i L.append("INFTY") L.append L append "INFTY" R.append("INFTY") R.append R append "INFTY" i = 0 i 0 j = 0 j 0 for k in range(left, right):
        if L[i] <= R[j]:
            A[k] = L[i]
            i += 1
        else:
            A[k] = R[j]
            j += 1
        global c
        c += 1 k range(left, right) range left right 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 global c c += 1 c 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 if __name__ == "__main__":
    lines = sys.stdin.readlines()
    N = int(lines[0])
    nums = [int(n) for n in lines[1].split(" ")]
    c = 0
    mergeSort(nums, 0, N)
    print " ".join(map(str, nums))
    print c __name__ == "__main__" __name__ "__main__" lines = sys.stdin.readlines() lines sys.stdin.readlines() sys.stdin.readlines sys.stdin sys stdin readlines N = int(lines[0]) N int(lines[0]) int lines[0] lines 0 int(n) for n in lines[1].split(" ") for n in lines[1].split(" ") n lines[1].split(" ") [1].split [1] lines 1 split " " for n in lines[1].split(" ") int(n) int n nums = [int(n) for n in lines[1].split(" ")] nums [int(n) for n in lines[1].split(" ")] c = 0 c 0 mergeSort(nums, 0, N) mergeSort nums 0 N print " ".join(map(str, nums)) " ".join " " join map(str, nums) map str nums 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 lines = sys.stdin.readlines() sys.stdin.readlines() lines N = int(lines[0]) int(lines[0]) N nums = [int(n) for n in lines[1].split(" ")] [int(n) for n in lines[1].split(" ")] nums c = 0 0 c def merge(A, left, mid, right):
    n1 = mid - left
    n2 = right - mid
    L = []
    R = []
    for i in range(n1):
        L.append(A[left+i])
    for i in range(n2):
        R.append(A[mid+i])
    L.append("INFTY")
    R.append("INFTY")
    i = 0
    j = 0
    for k in range(left, right):
        if L[i] <= R[j]:
            A[k] = L[i]
            i += 1
        else:
            A[k] = R[j]
            j += 1
        global c
        c += 1 def merge(A, left, mid, right):
    n1 = mid - left
    n2 = right - mid
    L = []
    R = []
    for i in range(n1):
        L.append(A[left+i])
    for i in range(n2):
        R.append(A[mid+i])
    L.append("INFTY")
    R.append("INFTY")
    i = 0
    j = 0
    for k in range(left, right):
        if L[i] <= R[j]:
            A[k] = L[i]
            i += 1
        else:
            A[k] = R[j]
            j += 1
        global c
        c += 1 merge
import sys

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

if __name__ == "__main__":
    lines = sys.stdin.readlines()
    N = int(lines[0])
    nums = [int(n) for n in lines[1].split(" ")]
    c = 0
    mergeSort(nums, 0, N)
    print " ".join(map(str, nums))
    print c