#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
****************************************************************/