INF = 10000000000
def merge(A,left,mid,right):
  count = 0
  L = A[left:mid] + [INF]
  R = A[mid:right] + [INF]
  i,j = 0,0
  for k in range(left, right):
    count += 1
    if L[i] <= R[j]:
      A[k]=L[i]
      i += 1
    else:
      A[k]=R[j]
      j += 1
  return count
def merge_sort(A,left,right):
  if left+1 < right:
    mid = (left+right)//2
    count_l = merge_sort(A,left,mid)
    count_r = merge_sort(A,mid,right)
    return merge(A,left,mid,right) + count_l + count_r
  return 0


n = int(input())
A = [int(i) for i in input().split()]
count = merge_sort(A, 0, n)
for i in range(n):
  if i:
    print(" ", end = "")
  print(A[i], end = "")
print()
print(count)  
 INF = 10000000000 INF 10000000000 def merge(A,left,mid,right):
  count = 0
  L = A[left:mid] + [INF]
  R = A[mid:right] + [INF]
  i,j = 0,0
  for k in range(left, right):
    count += 1
    if L[i] <= R[j]:
      A[k]=L[i]
      i += 1
    else:
      A[k]=R[j]
      j += 1
  return count merge count = 0 count 0 L = A[left:mid] + [INF] L A[left:mid] + [INF] A[left:mid] A left:mid left mid [INF] INF R = A[mid:right] + [INF] R A[mid:right] + [INF] A[mid:right] A mid:right mid right [INF] INF i,j = 0,0 i 0 j 0 for k in range(left, right):
    count += 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 count += 1 count 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 count count A A left left mid mid right right def merge_sort(A,left,right):
  if left+1 < right:
    mid = (left+right)//2
    count_l = merge_sort(A,left,mid)
    count_r = merge_sort(A,mid,right)
    return merge(A,left,mid,right) + count_l + count_r
  return 0 merge_sort if left+1 < right:
    mid = (left+right)//2
    count_l = merge_sort(A,left,mid)
    count_r = merge_sort(A,mid,right)
    return merge(A,left,mid,right) + count_l + count_r
   left+1 < right left+1 left 1 right mid = (left+right)//2 mid (left+right)//2 left+right left right 2 count_l = merge_sort(A,left,mid) count_l merge_sort(A,left,mid) merge_sort A left mid count_r = merge_sort(A,mid,right) count_r merge_sort(A,mid,right) merge_sort A mid right return merge(A,left,mid,right) + count_l + count_r merge(A,left,mid,right) + count_l + count_r merge(A,left,mid,right) + count_l merge(A,left,mid,right) merge A left mid right count_l count_r return 0 0 A A left left right right n = int(input()) n int(input()) int input() input int(i) for i in input().split() for i in input().split() i input().split() ().split () input split for i in input().split() int(i) int i A = [int(i) for i in input().split()] A [int(i) for i in input().split()] count = merge_sort(A, 0, n) count merge_sort(A, 0, n) merge_sort A 0 n for i in range(n):
  if i:
    print(" ", end = "")
  print(A[i], end = "") i range(n) range n if i:
    print(" ", end = "")
   i print(" ", end = "") print " " end = "" end "" print(A[i], end = "") print A[i] A i end = "" end "" print() print print(count) print count A = [int(i) for i in input().split()] [int(i) for i in input().split()] A INF = 10000000000 10000000000 INF def merge(A,left,mid,right):
  count = 0
  L = A[left:mid] + [INF]
  R = A[mid:right] + [INF]
  i,j = 0,0
  for k in range(left, right):
    count += 1
    if L[i] <= R[j]:
      A[k]=L[i]
      i += 1
    else:
      A[k]=R[j]
      j += 1
  return count def merge(A,left,mid,right):
  count = 0
  L = A[left:mid] + [INF]
  R = A[mid:right] + [INF]
  i,j = 0,0
  for k in range(left, right):
    count += 1
    if L[i] <= R[j]:
      A[k]=L[i]
      i += 1
    else:
      A[k]=R[j]
      j += 1
  return count merge def merge_sort(A,left,right):
  if left+1 < right:
    mid = (left+right)//2
    count_l = merge_sort(A,left,mid)
    count_r = merge_sort(A,mid,right)
    return merge(A,left,mid,right) + count_l + count_r
  return 0 def merge_sort(A,left,right):
  if left+1 < right:
    mid = (left+right)//2
    count_l = merge_sort(A,left,mid)
    count_r = merge_sort(A,mid,right)
    return merge(A,left,mid,right) + count_l + count_r
  return 0 merge_sort count = merge_sort(A, 0, n) merge_sort(A, 0, n) count n = int(input()) int(input()) n
INF = 10000000000
def merge(A,left,mid,right):
  count = 0
  L = A[left:mid] + [INF]
  R = A[mid:right] + [INF]
  i,j = 0,0
  for k in range(left, right):
    count += 1
    if L[i] <= R[j]:
      A[k]=L[i]
      i += 1
    else:
      A[k]=R[j]
      j += 1
  return count
def merge_sort(A,left,right):
  if left+1 < right:
    mid = (left+right)//2
    count_l = merge_sort(A,left,mid)
    count_r = merge_sort(A,mid,right)
    return merge(A,left,mid,right) + count_l + count_r
  return 0


n = int(input())
A = [int(i) for i in input().split()]
count = merge_sort(A, 0, n)
for i in range(n):
  if i:
    print(" ", end = "")
  print(A[i], end = "")
print()
print(count)  

