#include <bits/stdc++.h>
using namespace std;
#define st first
#define nd second
#define pb push_back
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define FORS(i,a,b) for(int i=(a);i<(b);++i)
#define PII pair<int,int>
#define VI vector<int>
#define VPII vector<PII>
#define all(x) x.begin(),b.end()
#define SZ(x) ((int)(x).size())
#define ll long long
#define MOD 10000000 //998244353
const int inf=0x3f3f3f3f;
#define maxn 500005
///buckets of bytes
#define maxb 8
#define bucket 0xFF //255,a byte aka bits 0-7(8 bits)
#define total_bytes (sizeof(v[1]))
#define get_byte(x) ((x>>(byte*8))&bucket)
int n,vec[maxn];
void printer(int* v){
FORS(i,0,n)
cout<<v[i]<<'\n';
}
bool verifier(int *v){
int *a=new int[n];
memcpy(a,v,sizeof(int)*n);
sort(a,a+n);
FORS(i,0,n)
if(a[i]!=v[i])
return 0;
return 1;
}
/// BUBBLE SORT
void bubbleSort(int* v)
{
FORS(i,0,n-1)
FORS(j,0,n-i-1)
if(v[j]>v[j+1])
swap(v[j],v[j+1]);
}
/// COUNT SORT
void countSort(int* v)
{
int maxi=0;
FORS(i,0,n)
if(v[i]>maxi)
maxi=v[i];
int freq[maxi+2];
memset(freq,0,sizeof(freq));
FORS(i,0,n)
freq[v[i]]++;
int j=0;
FOR(i,0,maxi)
while(freq[i]){
v[j++]=i;
--freq[i];
}
}
/// RADIX SORT
void countByteSort(int byte,int *v)
{
int count[1<<maxb];
int index[1<<maxb];
int aux[n+5];
//int *aux=new int[n];
index[0]=0;
memset(count,0,sizeof(count));
FORS(i,0,n)
count[get_byte(v[i])]++;
FORS(i,1,(1<<maxb))
index[i]=index[i-1]+count[i-1];
FORS(i,0,n)
aux[index[get_byte(v[i])]++]=v[i];
FORS(i,0,n)
v[i]=aux[i];
//return aux;
}
void radixSort(int* v)
{
for(unsigned int bit=0;bit<total_bytes;++bit)
countByteSort(bit,v);
//v=countSort(bit,v);
}
void quicksort(int* v)
{
cout<<1;
}
int main()
{
freopen("algsort.in","r",stdin);
//freopen("algsort.out","w",stdout);
cin>>n;
FORS(i,0,n)
cin>>vec[i];
countSort(vec);
FORS(i,0,n)
cout<<vec[i]<<' ';
/* n=maxn;
int v[n+2];
for(int i=0;i<n;i++)
v[i]=n-i;
radixSort(v);
if(verifier(v))
cout<<"YAS";
else
cout<<"NO";
//printer(v);
*/
}