1 #include<iostream>
2 using namespace std;
3 void Insertion_sort(long int a[],int s,int n){
4 int temp,i,j;
5 for(i=s+1;i<s+n;i++){
6 temp=a[i];
7 for(j=i-1;j>=s;j--){
8 if(a[j]>temp) a[j+1]=a[j];
9 else break;
10 }
11 a[j+1]=temp;
12 }
13 }
14 void Merge(long int a[],int l,int r,int rend,long int temp[]){
15 int lend=r-1,n=rend-l+1,t=l;
16 while(l<=lend&&r<=rend){
17 if(a[l]<a[r]) temp[t++]=a[l++];
18 else temp[t++]=a[r++];
19 }
20 while(l<=lend) temp[t++]=a[l++];
21 while(r<=rend) temp[t++]=a[r++];
22 for(int i=0;i<n;i++)
23 a[rend]=temp[rend--];
24 }
25 void Msort(long int a[],int l,int rend,long int temp[]){
26 if(rend-l+1>100){
27 if(l<rend){
28 int mid=(l+rend)/2;
29 Msort(a,l,mid,temp);
30 Msort(a,mid+1,rend,temp);
31 Merge(a,l,mid+1,rend,temp);
32 }
33 else
34 return;
35 }
36 else
37 Insertion_sort(a,l,rend-l+1);
38 }
39 void Merge_sort(long int a[],int n){
40 long int *temp=new long int[n];
41 Msort(a,0,n-1,temp);
42 delete []temp;
43 }
44 int main(){
45 int n;
46 cin>>n;
47 long int a[n];
48 for(int i=0;i<n;i++){
49 cin>>a[i];
50 }
51 Merge_sort(a,n);
52 for(int i=0;i<n;i++){
53 i>0?cout<<" "<<a[i]:cout<<a[i];
54 }
55 return 0;
56 }