count = 0
INFTY = 10 ** 10

def merge(A, left, mid, right):
  global count
  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):
    count = count + 1
    if L[i] <= R[j]:
      A[k] = L[i]
      i = i + 1
    else:
      A[k] = R[j]
      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)

import sys

n = raw_input()
for line in sys.stdin:
  items = line.strip().split()
  items = map(int, items)
  mergeSort(items, 0, len(items))
  print " ".join(map(str, items))
  print count count = 0 count 0 INFTY = 10 ** 10 INFTY 10 ** 10 10 10 def merge(A, left, mid, right):
  global count
  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):
    count = count + 1
    if L[i] <= R[j]:
      A[k] = L[i]
      i = i + 1
    else:
      A[k] = R[j]
      j = j + 1 merge global count 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):
    count = count + 1
    if L[i] <= R[j]:
      A[k] = L[i]
      i = i + 1
    else:
      A[k] = R[j]
      j = j + 1 k range(left, right) range left right count = count + 1 count count + 1 count 1 if L[i] <= R[j]:
      A[k] = L[i]
      i = i + 1
    else:
      A[k] = R[j]
      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 = i + 1 i i + 1 i 1 A[k] = R[j] A[k] A k R[j] R j j = j + 1 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 import sys sys n = raw_input() n raw_input() raw_input for line in sys.stdin:
  items = line.strip().split()
  items = map(int, items)
  mergeSort(items, 0, len(items))
  print " ".join(map(str, items))
  print count line sys.stdin sys stdin items = line.strip().split() items line.strip().split() line.strip().split line.strip() line.strip line strip split items = map(int, items) items map(int, items) map int items mergeSort(items, 0, len(items)) mergeSort items 0 len(items) len items print " ".join(map(str, items)) " ".join " " join map(str, items) map str items print def merge(A, left, mid, right):
  global count
  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):
    count = count + 1
    if L[i] <= R[j]:
      A[k] = L[i]
      i = i + 1
    else:
      A[k] = R[j]
      j = j + 1 def merge(A, left, mid, right):
  global count
  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):
    count = count + 1
    if L[i] <= R[j]:
      A[k] = L[i]
      i = i + 1
    else:
      A[k] = R[j]
      j = j + 1 merge items = line.strip().split() line.strip().split() items 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 items = map(int, items) map(int, items) items n = raw_input() raw_input() n count = 0 0 count INFTY = 10 ** 10 10 ** 10 INFTY
count = 0
INFTY = 10 ** 10

def merge(A, left, mid, right):
  global count
  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):
    count = count + 1
    if L[i] <= R[j]:
      A[k] = L[i]
      i = i + 1
    else:
      A[k] = R[j]
      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)

import sys

n = raw_input()
for line in sys.stdin:
  items = line.strip().split()
  items = map(int, items)
  mergeSort(items, 0, len(items))
  print " ".join(map(str, items))
  print count