#include <cstdio>
#define NMax 500000
int N, a[NMax];
void Qsort(int st, int dr);
int main()
{
freopen("algsort.in", "rt", stdin);
freopen("algsort.out", "wt", stdout);
int i;
scanf("%d", &N);
for (i = 0; i < N; ++i)
scanf("%d", &a[i]);
Qsort(0,N-1);
for (i = 0; i < N; ++i)
printf("%d ", a[i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}
void Qsort(int st, int dr)
{
int i = st, j = dr, aux;
int x = a[(i+j) >> 1];
do {
while (a[i] < x) ++i;
while (a[j] > x) --j;
if (i <= j)
{
aux = a[i];
a[i] = a[j];
a[j] = aux;
++i; --j;
}
} while (i < j);
if (j > st) Qsort(st,j);
if (i < dr) Qsort(i,dr);
}
/*
#include <stdio.h>
#include <algorithm>
using namespace std;
long n,i,j,l,v[500003];
char ch[5500000];
int main(){
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%ld\n",&n);
gets(ch);l=strlen(ch);ch[l]=' ';
j=0;
for (i=1;i<=n;++i){
int nr=0;
while (ch[j]!=' '){
nr=nr*10+ch[j]-'0';
j++;
}
j++;
v[i]=nr;
}
sort(v+1,v+n+1);
for (i=1;i<=n;++i)printf("%ld ",v[i]);
return 0;
}
#include<stdio.h>
#include<algorithm>
using namespace std;
int nr[500100];
char s[5000100];
int main(){
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int n,i,j=0,a;
char x[10];
scanf("%d",&n);
fgets(x,10,stdin);
fgets(s,n*10+10,stdin);
for(i=0;i<n;++i){
a=0;
while('0'<=s[j] && s[j]<='9')
a=a*10+s[j++]-'0';
++j;
nr[i]=a;
}
sort(nr,nr+n);
for(i=0;i<n-1;++i)
printf("%d ",nr[i]);
printf("%d\n",nr[n-1]);
fclose(stdin);
fclose(stdout);
return 0;
}
using namespace std;
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <string>
#include <fstream>
#include <algorithm>
#define N 500001
#define dim 8192
char ax[dim];
int pz;
char bx[dim];
int pz2;
inline void cit(int &x)
{
x=0;
while(ax[pz]<'0' || ax[pz]>'9')
if(++pz==dim)fread(ax,1,dim,stdin),pz=0;
while(ax[pz]>='0' && ax[pz]<='9')
{
x=x*10+ax[pz]-'0';
if(++pz==dim)fread(ax,1,dim,stdin),pz=0;
}
}
inline void afis(int x)
{
//printf("%d ", x);
int t=0;
while(x) t=t*10+x%10, x/=10;
// printf("%d\n", t);
while(t)
{
bx[pz2]=t%10 + '0';
t/=10;
if(++pz2 == dim) fwrite(bx, 1, dim, stdout),memset(bx, 0, sizeof(bx)),pz2=0;
}
bx[pz2]=' ';
if(++pz2 == dim) fwrite(bx,1,dim,stdout),memset(bx, 0, sizeof(bx)),pz2=0;
}
int a[N], b[N];
inline void rad(int n, int byte, int a[], int b[])
{
int cnt[256], ind[256],i;
memset(cnt, 0, sizeof(cnt));
for(i=1; i <= n; ++i) ++cnt[(a[i]>>byte)&255];
ind[0]=1;
for(i=1; i < 256; ++i) ind[i]=ind[i-1]+cnt[i-1];
for(i=1; i <= n; ++i) b[ind[(a[i]>>byte)&255]++]=a[i];
}
inline void radix(int a[], int n)
{
rad(n, 0, a, b);
rad(n, 8, b, a);
rad(n, 16, a, b);
rad(n, 24, b, a);
}
inline void scrie(int x)
{
char lin[33], *s=lin+30;
s[0]=0;
do
{
int cat=x/10;
--s;
s[0]=x-cat*10+'0';
x=cat;
}while(x);
puts(s);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
//ofstream g("algsort.out");
int n,i;
cit(n);
for(i=1;i<=n;++i) cit(a[i]);
radix(a,n);
//sort(a+1,a+n+1);
for(i=1;i<=n;++i) scrie(a[i]);//printf("%d ", a[i]);
//fwrite(bx, 1, dim, stdout);
return 0;
}
*/