# coding: utf-8
def merge_sort(a, left, right):
    if left + 1 < right:
        mid = (left + right) // 2
        merge_sort(a, left, mid)
        merge_sort(a, mid, right)
        merge(a, left, mid, right)

def merge(a, left, mid, right):
    global cnt
    global inf

    l = a[left:mid]
    r = a[mid:right]

    l.append(inf)
    r.append(inf)

    i, j = 0, 0

    for k in range(left, right, 1):
        cnt += 1
        if l[i] <= r[j]:
            a[k] = l[i]
            i += 1
        else:
            a[k] = r[j]
            j += 1


cnt = 0
inf = 1 << 32

n = int(input())
a = [int(x) for x in input().split(" ")]

merge_sort(a, 0, len(a))
print(" ".join(map(str, a)))
print(cnt) def merge_sort(a, left, right):
    if left + 1 < right:
        mid = (left + right) // 2
        merge_sort(a, left, mid)
        merge_sort(a, mid, right)
        merge(a, left, mid, right) merge_sort if left + 1 < right:
        mid = (left + right) // 2
        merge_sort(a, left, mid)
        merge_sort(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 merge_sort(a, left, mid) merge_sort a left mid merge_sort(a, mid, right) merge_sort 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 cnt
    global inf

    l = a[left:mid]
    r = a[mid:right]

    l.append(inf)
    r.append(inf)

    i, j = 0, 0

    for k in range(left, right, 1):
        cnt += 1
        if l[i] <= r[j]:
            a[k] = l[i]
            i += 1
        else:
            a[k] = r[j]
            j += 1 merge global cnt global inf l = a[left:mid] l a[left:mid] a left:mid left mid r = a[mid:right] r a[mid:right] a mid:right mid right l.append(inf) l.append l append inf r.append(inf) r.append r append inf i, j = 0, 0 i 0 j 0 for k in range(left, right, 1):
        cnt += 1
        if l[i] <= r[j]:
            a[k] = l[i]
            i += 1
        else:
            a[k] = r[j]
            j += 1 k range(left, right, 1) range left right 1 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 cnt = 0 cnt 0 inf = 1 << 32 inf 1 << 32 1 32 n = int(input()) n int(input()) int input() input int(x) for x in input().split(" ") for x in input().split(" ") x input().split(" ") ().split () input split " " for x in input().split(" ") int(x) int x a = [int(x) for x in input().split(" ")] a [int(x) for x in input().split(" ")] merge_sort(a, 0, len(a)) merge_sort a 0 len(a) len a print(" ".join(map(str, a))) print " ".join(map(str, a)) " ".join " " join map(str, a) map str a print(cnt) print cnt def merge(a, left, mid, right):
    global cnt
    global inf

    l = a[left:mid]
    r = a[mid:right]

    l.append(inf)
    r.append(inf)

    i, j = 0, 0

    for k in range(left, right, 1):
        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):
    global cnt
    global inf

    l = a[left:mid]
    r = a[mid:right]

    l.append(inf)
    r.append(inf)

    i, j = 0, 0

    for k in range(left, right, 1):
        cnt += 1
        if l[i] <= r[j]:
            a[k] = l[i]
            i += 1
        else:
            a[k] = r[j]
            j += 1 merge a = [int(x) for x in input().split(" ")] [int(x) for x in input().split(" ")] a n = int(input()) int(input()) n cnt = 0 0 cnt inf = 1 << 32 1 << 32 inf def merge_sort(a, left, right):
    if left + 1 < right:
        mid = (left + right) // 2
        merge_sort(a, left, mid)
        merge_sort(a, mid, right)
        merge(a, left, mid, right) def merge_sort(a, left, right):
    if left + 1 < right:
        mid = (left + right) // 2
        merge_sort(a, left, mid)
        merge_sort(a, mid, right)
        merge(a, left, mid, right) merge_sort
# coding: utf-8
def merge_sort(a, left, right):
    if left + 1 < right:
        mid = (left + right) // 2
        merge_sort(a, left, mid)
        merge_sort(a, mid, right)
        merge(a, left, mid, right)

def merge(a, left, mid, right):
    global cnt
    global inf

    l = a[left:mid]
    r = a[mid:right]

    l.append(inf)
    r.append(inf)

    i, j = 0, 0

    for k in range(left, right, 1):
        cnt += 1
        if l[i] <= r[j]:
            a[k] = l[i]
            i += 1
        else:
            a[k] = r[j]
            j += 1


cnt = 0
inf = 1 << 32

n = int(input())
a = [int(x) for x in input().split(" ")]

merge_sort(a, 0, len(a))
print(" ".join(map(str, a)))
print(cnt)
