#include<stdio.h>

int count=0;
void merge(int A[],int left,int mid,int right)
{

    int n1=mid-left;
    int n2=right-mid;

    int L[n1],R[n2];

    for(int i=0;i<n1;i++)L[i]=A[left+i];
    for(int i=0;i<n2;i++)R[i]=A[mid+i];


    int i=0,j=0;
    for(int k=left;k<right;k++)
    {
        count++;
        if(L[i]<=R[j] && (i<n1 || j<n2))
        {
            A[k]=L[i++];
        }else{
            A[k]=R[j++];
        }
    }
}

void mergesort(int A[],int left,int right)
{
    if(left+1<right)
    {
        int mid=(left+right)/2;
        mergesort(A,left,mid);
        mergesort(A,mid,right);
        merge(A,left,mid,right);
    }
}

int main()
{
    int n;
    scanf("%d",&n);
    int A[n];
    for(int i=0;i<n;i++)scanf("%d",&A[i]);

    mergesort(A,0,n);
    for(int i=0;i<n;i++)
    {
        if(i)printf(" ");
        printf("%d",A[i]);
    }
    printf("\n");
    printf("%d",count);
}

