#include<iostream>
using namespace std;
const int N = 100010;
int arr[N];
void merge(int arr[], int st, int mid, int ed) // [st,ed]
{
int copy_left[mid - st + 1]; // 拷贝左半边[st,mid]
for(int i = 0, j = st; j <= mid;)
{
copy_left[i++] = arr[j++];
}
int i = 0, j = mid + 1, k = st;
while(i <= mid - st && j <= ed) // 冷静分析出各个下标的含义,才不会搞错!!!
{
if(copy_left[i] > arr[j])
arr[k++] = arr[j++];
else arr[k++] = copy_left[i++];
}
while(i <= mid - st) arr[k++] = copy_left[i++]; // j > ed 的情况
// 否则就不用写了,因为j本身就在数组中
}
void merge_sort(int arr[], int st, int ed){ // [st,ed]
if(st >= ed) return;
int mid = st + ed >> 1;
merge_sort(arr, st, mid);
merge_sort(arr, mid + 1, ed);
merge(arr, st, mid, ed);
}
int main()
{
int n;
scanf("%d",&n);
for(int i = 0; i < n; i++ )
{
scanf("%d",&arr[i]);
}
merge_sort(arr, 0, n - 1);
for(int i = 0; i < n; i++)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}