#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
//归并排序--分治
void Merge(vector<int> &vecarr,int s,int m,int e,vector<int> &vecarrbk)
{
//开始有序的往备胎里面放
int m1=m+1,int ipos=0;
int s1=s;
while(s<=m&&m1<=e)
{
if(vecarr[s]<vecarr[m1])
{
vecarrbk[ipos++]=vecarr[s++];
}
else
{
vecarrbk[ipos++]=vecarr[m1++];
}
}
while(s<=m)
{
vecarrbk[ipos++]=vecarr[s++];
}
while(m1<=e)
{
vecarrbk[ipos++]=vecarr[m1++];
}
for(int i=0;i<e-s1+1;++i)
{
vecarr[s1+i]=vecarrbk[i];
}
}
void MergeSort(vector<int> &vecarr,int s,int e,vector<int> &vecarrbk)
{
if(s<e)
{
int m=s+(e-s)/2;
MergeSort(vecarr,s,m,vecarrbk);
MergeSort(vecarr,m+1,e,vecarrbk);
Merge(vecarr,s,m,e,vecarrbk);
}
}
int main()
{
int n=0;
vector<int> vecarr;
cin>>n;
for(int i=0;i<n;i++)
{
int itemp=0;
cin>>itemp;
vecarr.push_back(itemp);
}
vector<int> vecarrbk(n);
MergeSort(vecarr,0,vecarr.size()-1,vecarrbk);
for(int m=0;m<vecarr.size();m++)
{
cout<<vecarr[m]<<" ";
}
cout<<endl;
return 0;
}