infinity=2**35
def merge(A,left,mid,right):
  global cnt

  L=A[left:mid]
  R=A[mid:right]
  L.append(infinity)
  R.append(infinity)
  
  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



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)


n=int(input())
A=list(map(int,input().split()))
cnt=0

mergeSort(A,0,n)

print(*A)
print(cnt)
 infinity=2**35 infinity 2**35 2 35 def merge(A,left,mid,right):
  global cnt

  L=A[left:mid]
  R=A[mid:right]
  L.append(infinity)
  R.append(infinity)
  
  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 merge global cnt 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(infinity) L.append L append infinity R.append(infinity) R.append R append infinity 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 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 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=0 cnt 0 mergeSort(A,0,n) mergeSort A 0 n print(*A) print *A A print(cnt) print cnt def merge(A,left,mid,right):
  global cnt

  L=A[left:mid]
  R=A[mid:right]
  L.append(infinity)
  R.append(infinity)
  
  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 def merge(A,left,mid,right):
  global cnt

  L=A[left:mid]
  R=A[mid:right]
  L.append(infinity)
  R.append(infinity)
  
  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 merge A=list(map(int,input().split())) list(map(int,input().split())) A infinity=2**35 2**35 infinity 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 cnt=0 0 cnt n=int(input()) int(input()) n
infinity=2**35
def merge(A,left,mid,right):
  global cnt

  L=A[left:mid]
  R=A[mid:right]
  L.append(infinity)
  R.append(infinity)
  
  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



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)


n=int(input())
A=list(map(int,input().split()))
cnt=0

mergeSort(A,0,n)

print(*A)
print(cnt)

