//不稳定的计数排序
#include<cstdio>
#include<iostream>
using namespace std;
int a[100000];
int b[100000];
void init(int n)
{
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
}
void countsort(int n)
{
int Max=0;
for(int i=1; i<=n; i++)
{
b[a[i]]++;
Max=max(Max,a[i]);
}
for(int i=1; i<=Max; i++)
{
if(b[i]--)
printf("%d ",i);
}
}
int main()
{
int n;
while(cin>>n)
{
memset(b,0,sizeof(b));
init(n);
countsort(n);
printf("\n");
}
return 0;
}
//稳定版计数排序
#include<cstdio>
#include<iostream>
using namespace std;
int a[100000];
int b[100000];
int c[100000];
void init(int n)
{
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
}
void print()
{
for(int i=1; i<=n; i++)
printf("%d ",b[i]);
printf("\n");
}
void countsort(int n)
{
int Max=0;
for(int i=1; i<=n; i++)
{
c[a[i]]++;
Max=max(Max,a[i]);
}
for(int i=1; i<=Max; i++)
{
c[i]+=c[i-1]; //用计数
}
for(int i=n; i>=1; i--)
{
b[c[a[i]]]=a[i];
c[a[i]]--;
}
}
int main()
{
int n;
while(cin>>n)
{
memset(c,0,sizeof(c));
memset(b,0,sizeof(b));
init(n);
countsort(n);
print();
}
return 0;
}