#include<stdio.h>
FILE *f = fopen("algsort.in","r");
FILE *g = fopen("algsort.out","w");
#define MaxN 1200100
#define INF ((1<<31)-1)
#define mij ((li+ls)>>1)
#define fs (poz<<1)
#define fd ((poz<<1)+1)
int N;
int A[MaxN],AINT[MaxN];
inline int min(int a,int b)
{
return a < b ? a : b;
}
inline int pozAINT(int li,int ls,int poz)
{
if(li == ls)
return li;
if(AINT[poz] == AINT[poz<<1])
return pozAINT(li,mij,poz<<1);
else
return pozAINT(mij+1,ls,(poz<<1)+1);
}
inline void build(int li,int ls,int poz)
{
if(li == ls)
{
AINT[poz] = A[li];
return ;
}
build(li,mij,fs);
build(mij+1,ls,fd);
AINT[poz] = min(AINT[fs],AINT[fd]);
}
inline void insertAINT(int li,int ls,int poz,int poz2,int val)
{
if(li == ls)
{
AINT[poz] = val;
return ;
}
if(poz2 <= mij)
insertAINT(li,mij,poz<<1,poz2,val);
else
insertAINT(mij+1,ls,(poz<<1)+1,poz2,val);
AINT[poz] = min(AINT[poz<<1],AINT[(poz<<1)+1]);
}
void citire(void)
{
fscanf(f,"%d",&N);
for(int i=1;i<=N;i++)
fscanf(f,"%d",&A[i]);
}
void sortare(void)
{
build(1,N,1);
for(int i=1;i<=N;i++)
{
fprintf(g,"%d ",AINT[1]);
insertAINT(1,N,1,pozAINT(1,N,1),INF);
}
}
int main()
{
citire();
sortare();
}