1 #include<iostream>
2 using namespace std;
3 #include<cstring>
4 #include<cstdio>
5 #include<cstdlib>
6 int cs = 0;
7
8 void merge(int source[], int temp[], int l, int mid, int r) {
9 int i = l, j = mid + 1;
10 int point = l;
11 while (i < mid + 1 && j < r + 1) {
12 if (source[i] < source[j])
13 temp[point++] = source[i++],cs+=1;
14 else
15 temp[point++] = source[j++],cs+=1;
16 }
17 while (i < mid + 1)
18 temp[point++] = source[i++],cs+=1;
19 while (j < r + 1)
20 temp[point++] = source[j++],cs+=1;
21 for (i = l; i <= r; i++)
22 source[i] = temp[i];
23 }
24
25 void mergesort(int source[], int temp[], int l, int r) {
26 if (l >= r) return;
27 int mid = (l + r) / 2;
28 mergesort(source, temp, l, mid);
29 mergesort(source, temp, mid + 1, r);
30 merge(source, temp, l, mid, r);
31 }
32 int a[510000];
33 int t[510000];
34 int main(){
35 int n;
36 scanf("%d",&n);
37 for(int i=0;i<n;i++)
38 scanf("%d",&a[i]);
39 mergesort(a,t,0,n-1);
40 for(int i=0;i<n;i++){
41 printf("%d",a[i]);
42 if(i!=n-1)
43 putchar(' ');
44 }
45 cout<<endl;
46 cout<<cs<<endl;
47 }