//
#include <iostream>
using namespace std;
void merge(int *,int,int,int);
void mergeSort(int*,int ,int);
{
int A[size];
int n;
cin>>n;
for(int i =0;i<n;i++)
{
cin>>A[i];
for(int i=0;i<n;i++)
{
cout<<A[i]<<endl;
}
mergeSort(A,0,n-1);
for(int i=0;i<n;i++)
{
cout<<A[i]<<endl;
}
return 0;
}
void merge(int * A , int p, int q,int r)
{
int n1 = q-p+1;
int n2 = r-q;
const int ll = 100;
const int rr = 100;
int L[ll];
int R[rr];
const int finite = 30000;
for(int i = 0;i<n1;i++)
L[i] = A[p+i];
for(int j = 0;j<n2;j++)
R[j] = A[q+1+j];
L[n1] = finite;
R[n2] = finite;
int i =0;
int j = 0;
for(int k = 0; k <n1+n2 ;k++)
{
if(L[i]>=R[j])
{
A[p+k] = R[j];
j = j+1;
}
else
{
A[p+k] = L[i];
i = i+1;
}
}
{
{
cout<<"p"<<p<<endl;
cout<<"q"<<q<<endl;
int r = (p+q)/2;
mergeSort(A,p,r);
mergeSort(A,r+1,q);
cout<<"merge"<<p<<" "<<q<<endl;
merge(A,p,r,q);
}
}