import scala.io.StdIn.{readLine,readInt}
import scala.language.postfixOps

object Main {
  private[this] var cnt = 0
  private[this] val l = new Array[Int](270000)
  private[this] val r = new Array[Int](270000)

  def merge(a:Array[Int],left:Int,mid:Int,right:Int) = {
    val n1 = mid-left
    val n2 = right-mid
    Array.copy(a,left,l,0,n1)
    l(n1) = Int.MaxValue
    Array.copy(a,mid,r,0,n2)
    r(n2) = Int.MaxValue
    var i=0
    var j=0
    for(k<-left until right) {
      if(l(i)<=r(j)){
        a(k) = l(i)
        i += 1
      } else  {
        a(k)=r(j)
        j += 1
      }
      cnt += 1
    }
  }

  def getSortIndex(n:Int):Iterator[Iterator[(Int,Int)]] = {
    var h = 0
    var w = 0
    var n2 = n
    while(n2>1) {
      n2 = n2/2
      h += 1
    }
    for(i<-h to 1 by -1 iterator) yield {
      for(j<-1 to Math.pow(2,i).toInt iterator) yield {
        ( (n*(j-1)/Math.pow(2,i)).toInt,(n*j/Math.pow(2,i)).toInt )
      }
    }
  }

  def main(args:Array[String]) = {
    val n = readInt
    val a = readLine.split(" ").map(_.toInt)
    val idx = getSortIndex(n)
    for(it<-idx) {
      for(e<-it) {
        val mid = (e._2+e._1)/2
        if(e._2-e._1>1)
          merge(a,e._1,mid,e._2)
      }
    }
    merge(a,0,n/2,n)
    println(a.mkString(" "))
    println(cnt)
  }
}