#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector <int> bucket[65536];
int get_digit(int n, int radix){
int ct = 0;
while(n){
ct++, n /= radix;
}
return ct;
}
void fsort(int *left, int *right, int radix = 65536){
int max_digit = 0;
for(int *i = left; i < right; i++){
max_digit = max(max_digit, get_digit(*i, radix));
}
for(int _ = 1, cur = 1; _ <= max_digit; _, cur *= radix){
for(int *i = left; i < right; i){
bucket[(*i) / cur % radix].push_back(*i);
}
int *ct = left;
for(int i = 0; i < radix; i++){
for(auto it:bucket[i]){
*ct++ = it;
}
bucket[i].clear();
}
}
}
int a[100005];
int main(){
int n;
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
fsort(a + 1, a + n + 1);
for(int i = 1; i <= n; i++){
cout << a[i] << ' ';
}