//#include <stdio.h>
//#include <stdlib.h>
//
//int v[500000],id[100000],aux[5000000];
//
//void buckets(int st, int dr, int imp){
// int i,j;
// if(imp>=1){
// j=0;
// for(i=st;i<=dr;i++){
// if(v[i]/imp+1>j)
// j=v[i]/imp+1;
// }
// for(i=0;i<=j;i++)
// id[i]=0;
// for(i=st;i<=dr;i++){
// id[v[i]/imp+1]++;
// }
//
// id[0]+=st;
// for(i=1;i<=j;i++){
// id[i]+=id[i-1];
// }
//
// for(i=st;i<=dr;i++){
// aux[id[v[i]/imp]]=v[i];
// id[v[i]/imp]++;
// }
//
// for(i=st;i<=dr;i++){
// v[i]=aux[i];
// aux[i]=0;
// }
//
// i=0;
// buckets(st,id[0]-1,imp/10);
// while(i<j-1){
// buckets(id[i],id[i+1]-1,imp/10);
// }
// }
//}
//
//int main(){
// int n,i,imp;
// FILE *fin, *fout;
// fin=fopen("algsort.in","r");
// fscanf(fin,"%d",&n);
// for(i=0;i<n;i++){
// fscanf(fin,"%d",&v[i]);
// }
// fclose(fin);
//
// buckets(0,n-1,100);
//
// fout=fopen("algsort.out","w");
// for(i=0;i<n;i++)
// fprintf(fout,"%d ",v[i]);
// fclose(fout);
// return 0;
//}
#include <stdio.h>
#include <stdlib.h>
int v[500000],id[100000],aux[5000000];
void quicksort(int begin, int end){
int b=begin,e=end,pivot=v[(begin+end)/2],aux;
while(v[b]<pivot)
b++;
while(v[e]>pivot)
e--;
while(b<e){
aux=v[b];
v[b]=v[e];
v[e]=aux;
do{
b++;
} while(v[b]<pivot);
do{
e--;
}while(v[e]>pivot);
}
if(e>begin)
quicksort(begin,e);
if(e+1<end)
quicksort(e+1,end);
}
int main(){
int n,i,val,j;
FILE *fin, *fout;
fin=fopen("algsort.in","r");
fscanf(fin,"%d",&n);
for(i=0;i<n;i++){
fscanf(fin,"%d",&v[i]);
v[i]--;
}
fclose(fin);
val=1;
j=0;
for(i=0;i<n;i++){
id[v[i]/val+1]++;
if(v[i]/val+1>j)
j=v[i]/val+1;
}
for(i=1;i<=j;i++){
id[i]+=id[i-1];
}
for(i=0;i<n;i++){
aux[id[v[i]/val]]=v[i];
id[v[i]/val]++;
}
for(i=0;i<n;i++){
v[i]=aux[i];
aux[i]=0;
}
i=0;
quicksort(0,id[0]-1);
while(i<j-1){
quicksort(id[i],id[i+1]-1);
i++;
}
fout=fopen("algsort.out","w");
for(i=0;i<n;i++)
fprintf(fout,"%d ",v[i]+1);
fclose(fout);
return 0;
}