#include<iostream>
#include<ctime>
#include<cstring>
using namespace std;
const int N = 1e5+10;
int n;
int a[N];
int tmp[N];//归并排序的辅助数组
void insert_sort() //插入排序
{
for(int i = 2;i <= n;i++)
{
int key = a[i];
int j = i;
while(j > 1 && a[j-1] > key)
{
a[j] = a[j-1];
j--;
}
a[j] = key;
}
}
void select_sort() //选择排序
{
for(int i = 1;i <= n;i++)//i为未排序序列的第一个
{
int minj = i,minnum = a[i];
for(int j = i+1;j <= n;j++)
{
if(a[j] < minnum)
{
minj = j;
minnum = a[minj];
}
}
swap(a[minj],a[i]);
}
}
void bubble_sort() //冒泡排序
{
for(int i = 1;i < n;i++)
{
bool flag = true; //优化
for(int j = 1;j <= n-i;j++)
{
if(a[j] > a[j+1])
{
swap(a[j],a[j+1]);
flag = false;
}
}
if(flag) break;
}
}
void down(int parent,int len) //向下调整算法
{
int child = 2*parent;
while(child <= len)
{
if(child+1 <= len && a[child] < a[child+1]) child++;
if(a[parent] > a[child]) return;
swap(a[parent],a[child]);
parent = child;
child = 2*parent;
}
}
void heap_sort() //堆排序
{
//建堆
for(int i = n/2;i >= 1;i--)//从第一个非叶子节点开始执行向下调整
{
down(i,n);
}
//排序
for(int i = n;i > 1;i--)
{
swap(a[i],a[1]);
down(1,i-1);
}
}
int get_random(int left,int right)//快排优化1:随机获取一个基准元素
{
return a[rand()%(right-left+1) + left];
}
void quick_sort(int left,int right) //快速排序
{
if(left >= right) return;
int key = get_random(left,right);
int l = left-1,r = right+1,i = left;
while(i < r) //优化2:三路划分
{
if(a[i] < key)//放左边
{
l++;
swap(a[l],a[i]);
i++;
}
else if(a[i] == key) i++;
else
{
r--;
swap(a[r],a[i]);
}
}
//[left,l] [r,right]
quick_sort(left,l);
quick_sort(r,right);
}
void merge_sort(int left,int right) //归并排序
{
if(left >= right) return;
int mid = (left+right) >> 1;
merge_sort(left,mid);
merge_sort(mid+1,right);
int cur1 = left,cur2 = mid+1,cur = left;
while(cur1 <= mid && cur2 <= right)
{
if(a[cur1] < a[cur2]) tmp[cur++] = a[cur1++];
else tmp[cur++] = a[cur2++];
}
while(cur1 <= mid) tmp[cur++] = a[cur1++];
while(cur2 <= right) tmp[cur++] = a[cur2++];
for(int i = left;i <= right;i++) a[i] = tmp[i];
}
int main()
{
srand(time(0));
cin >> n;
for(int i = 1;i <= n;i++) cin >> a[i];
merge_sort(1,n);
for(int i = 1;i <= n;i++) cout << a[i] << " ";
return 0;
}