#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define len 1009
#define maxint 1<<31-1
int list[len];
void swap(int ind1,int ind2){
int temp = list[ind1];
list[ind1] = list[ind2];
list[ind2] = temp;
}
void mpsort_list(int n){//冒泡排序
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n-i;j++){
if(list[j]>list[j+1]){
swap(j,j+1);
}
}
}
}
int piv(int l,int r){
int temp = list[l];
while(l<r){
while(l<r&&list[r]>temp){
r--;
}
list[l] = list[r];
while(l<r&&list[l]<temp){
l++;
}
list[r] = list[l];
}
list[l] = temp;
return l;
}
void quicksort_list(int l,int r){//快排
if(l<r){
int mid = piv(l,r);
quicksort_list(l,mid-1);
quicksort_list(mid+1,r);
}
}
void build_leap(int ind,int n){
list[0] = list[ind];
for(int i = 2*ind;i<=n;i*=2){
if(i<n&&list[i+1]>list[i]){
i++;
}
if(list[0]>=list[i])break;
else{
list[ind] = list[i];
ind = i;
}
}
list[ind] = list[0];
}
void buildmax_leap(int n){
for(int i = n/2;i>=1;i--){
build_leap(i,n);
}
}
void leapsort_list(int n){//堆排序
buildmax_leap(n);
for(int i = n;i>=1;i--){
swap(1,i);
build_leap(1,i-1);
}
}
int cmp(const void*s1,const void*s2){
int a1 = *(int*)s1;
int a2 = *(int*)s2;
return a1-a2;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for(int i = 1;i<=n;i++){
scanf("%d",&list[i]);
}
//mpsort_list(n);
//quicksort_list(1,n);
//leapsort_list(n);
qsort(list+1,n,sizeof(int),cmp);
for(int i = 1;i<=n;i++){
printf("%d ",list[i]);
}
printf("\n");
}
}