#include <cstdio>
#include <cstdlib>
#include <stack>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 100000;
int val[MAXN];
int n;
void Radix(int byte, int *A, int *B) {
	int temp[256];
	memset(temp, 0, sizeof(temp));
	byte <<= 3;
	for (int i = 0; i < n; ++i)
		temp[((A[i]) >> (byte)) & 255]++;
	for (int i = 1; i < 256; ++i)
		temp[i] += temp[i - 1];
	for (int i = n - 1; i >= 0; --i) {
		B[temp[(A[i] >> (byte)) & 255] - 1] = A[i];
		temp[(A[i] >> (byte)) & 255]--;
	}
}
void RadixSort() {
	int* memory = new(int[n]);
	for (unsigned int i = 0; i < sizeof(int); i += 2) {
		Radix(i, val, memory);
		Radix(i + 1, memory, val);
	}
	delete[] memory;
}
int main() {
	scanf("%d", &n);
	for (int i = 0;i < n;i++) {
		scanf("%d", &val[i]);
	}
	RadixSort();
	for (int i = 0;i < n;i++) {
		printf("%d ", val[i]);
	}
	puts("");
	return 0;
}
/**************************************************************
	Problem: 2178
	User: admin
	Language: C++
	Result: Accepted
	Time:38 ms
	Memory:1952 kb
****************************************************************/