//Author:PanDaoxi
#include <iostream>
using namespace std;
const int maxn=101;
int a[maxn],r[maxn];
// 归并排序
void merge(int left,int right){
{
// 1.分解
if(left==right) return; // 分解完成
int mid=(left+right)/2;
merge(left,mid);
merge(mid+1,right);
// 2.归并
int i=left,j=mid+1,k=left;
while(i<=mid&&j<=right){
// 两侧都有数值
if(a[i]<a[j]) r[k++]=a[i++];
else r[k++]=a[j++];
}
while(i<=mid){
// 右侧无元素
r[k++]=a[i++];
}
while(j<=right){
// 左侧无元素
r[k++]=a[j++];
}
}
// a数组更新为归并好的数组
for(int i=left;i<=right;i++){
a[i]=r[i];
}
return;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
// 归并排序
merge(1,n);
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}