#include<iostream>
#include<vector>
using namespace std;
int get_nr_digits(int x) {
int nr_digits = 0;
while (x > 0) {
nr_digits++;
x = x / 10;
}
return nr_digits;
}
void radix_sort(vector<int> &a) {
int n = a.size();
if (n > 1) {
vector<vector <int>> bucket(10, vector<int>());
int max = a[0];
for (int i = 1; i < n; i++)
if (a[i] > max)
max = a[i];
int nr_digits = get_nr_digits(max), divide = 1;
for (int i = 0; i < nr_digits; i++) {
if (i > 0)
divide *= 10;
for (int i = 0; i < n; i++) {
int digit = (a[i] / divide) % 10;
bucket[digit].push_back(a[i]);
}
a.clear();
for (int i = 0; i <= 9; i++) {
a.insert(a.end(), bucket[i].begin(), bucket[i].end());
bucket[i].clear();
}
}
}
return;
}
int main() {
#ifdef INFOARENA
ifstream cin("algsort.in");
ofstream cout("algsort.out");
#endif
int n; cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++)
cin >> a[i];
radix_sort(a);
for (int i = 0; i < n; i++)
cout << a[i] << " ";
cout << "\n";
return 0;
}