#include<fstream>
using namespace std;
size_t v[500001], output[500001], n;
size_t getMax()
{
size_t mx = v[0];
for (size_t i = 1; i < n; i++)
if (v[i] > mx)
mx = v[i];
return mx;
}
void countSort(size_t exp)
{
size_t i, count[10] = {0};
for (i = 0; i < n; i++)
count[ (v[i]/exp)%10 ]++;
for (i = 1; i < 10; i++)
count[i] += count[i - 1];
for (i = n - 1; i >= 0; i--)
{
output[count[ (v[i]/exp)%10 ] - 1] = v[i];
count[ (v[i]/exp)%10 ]--;
}
for (i = 0; i < n; i++)
v[i] = output[i];
}
void radixsort()
{
size_t m = getMax();
for (size_t exp = 1; m/exp > 0; exp *= 10)
countSort(exp);
}
int main()
{
ifstream fin("algsort.in");
ofstream fout("algsort.out");
fin >> n;
for(size_t i = 0; i < n; i++) fin >> v[i];
radixsort();
for(size_t i = 0; i < n; i++) fout << v[i] << " ";
return 0;
}