#include <cstdio>
#include <cstdlib>
#include <stack>
#include <algorithm>
using namespace std;
const int MAXN = 100000;
int val[MAXN];
int n;
void Merge(int l, int mid, int r, int t[]) {
int i = l, j = mid + 1, k = 0;
while (i <= mid && j <= r) {
if (val[i] <= val[j])
t[k++] = val[i++];
else
t[k++] = val[j++];
}
while (i <= mid)
t[k++] = val[i++];
while (j <= r)
t[k++] = val[j++];
for (i = 0; i < k; i++)
val[l + i] = t[i];
}
void MSort(int l, int r, int t[]) {
if (l < r) {
int mid = (l + r) / 2;
MSort(l, mid, t);
MSort(mid + 1, r, t);
Merge(l, mid, r, t);
}
}
void MergeSort()
{
int *memory = new int[n];
if (memory == NULL)
return;
MSort(0, n - 1, memory);
delete[] memory;
}
int main() {
scanf("%d", &n);
for (int i = 0;i < n;i++) {
scanf("%d", &val[i]);
}
MergeSort();
for (int i = 0;i < n;i++) {
printf("%d ", val[i]);
}
puts("");
return 0;
}
/**************************************************************
Problem: 2177
User: admin
Language: C++
Result: Accepted
Time:45 ms
Memory:1952 kb
****************************************************************/