/*
int main()
{
printf("Hello world!\n");
return 0;
}
//
#include <stdio.h>
int arr[50001]={}; // 정렬 한 배열
int bs(int s, int e, int k)
// arr[start] ~ arr[end] 에 k 값의 위치를 리턴, 없다면 -1리턴
{
if(s>e) return -1;
int mid = (s+e)/2;
if(arr[mid]==k) return mid;
else if(arr[mid]>k) return bs(s,mid-1,k);
else return bs(mid+1,e,k);
}
int main()
{
int n,a,j,i,t;
int brr[50001]={}; // 정렬 안 한 배열
scanf("%d",&n);
for(i=1; i<=n ;i++){
scanf("%d",&arr[i]);
brr[i]=arr[i];
}
for(i=1; i<n; i++){
for(j=1; j<=n-i; j++){
if(arr[j]>arr[j+1]){
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
for(i=1; i<=n; i++){
// brr[i]가 arr에 어디에 있는지?
printf("%d ",bs(1,n,brr[i]));
}
return 0;
}
//#include <stdio.h>
//int arr[4500001]={};
//int bs(int s, int e, int k)
//{
// if(s>e) return -1;
// int mid = (s+e)/2;
// if(arr[mid]==k) return mid;
// else if(arr[mid]>k) return bs(s,mid-1,k);
// else return bs(mid+1,e,s);
//}
//int main()
//{
// int n,a,j,i,t;
// int brr[100001]={};
// scanf("%d",&n);
// for(int i=1; i<=n; i++)
// {
// scanf("%d",&arr[i]);
// }
// for(i=1; i<n; i++)
// {
// for(j=1; j<=n-i; j++)
// {
// if(arr[j]>arr[j+1])
// {
// t=arr[j];
// arr[j]=arr[j+1];
// arr[j+1]=t;
// }
// }
// }
// for(int i=1; i<=n; i++){
// printf("%d ",bs(i,n,brr[i]));
// }
//}
arr[i] :i번째 입력된 데이터 (x)
i에 대한 메모 (o) ex) i가 입력된 횟수
//
#include <stdio.h>
int main()
{
int arr[24]={};
int n,m;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%d",&m);
arr[m]++;
}
for(int i=1; i<=23; i++)
{
printf("%d ",arr[i]);
}
return 0;
}
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] .... a[10만]
0 1 2 0 0 1 0 0 1 ... 0
-> i를 a[i]번 출력
1 2 2 5 8
*/
#include <stdio.h>
int main()
{
int n,m;
int arr[100001]={};
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%d",&m);
arr[m]++;
}
for(int i=0; i<=100000; i++)
{
for(int j=0;j<arr[i];j++) // arr[i]번 반복
{
printf("%d ",i);
}
}
return 0;
}



