#include <cstdio>
#include <cmath>
#include <algorithm>
#define nmax 2147483647 //2^31-1
using namespace std;
int n,m,a[500001],s[1000001],op,x,y,poz;
void Creare(int nod,int st,int dr)
{ int mij=st+(dr-st)/2;
if(st==dr) s[nod]=a[st];
else
{ Creare(nod*2,st,mij);
Creare(nod*2+1,mij+1,dr);
s[nod]=min(s[nod*2],s[nod*2+1]);
}
}
int Find(int nod,int st,int dr,int x)
{ if(st==dr&&a[st]==x) return nod;
else { int mij=st+(dr-st)/2;
if(s[nod*2]==x) return Find(nod*2,st,mij,x);
else return Find(nod*2+1,mij+1,dr,x);
}
}
void Actualizare(int poz)
{ s[poz/2]=min(s[poz/2*2],s[poz/2*2+1]);
if(poz!=1) Actualizare(poz/2);
}
int main()
{ FILE *f,*g;
f=fopen("algsort.in","r");
g=fopen("algsort.out","w");
fscanf(f,"%d",&n);
int i;
//for(i=1;i<=2*n;i++) s[i]=nmax;
for(i=1;i<=n;i++) fscanf(f,"%d",&a[i]);
Creare(1,1,n);
for(i=1;i<=n;i++)
{ fprintf(g,"%d ",s[1]);
poz=Find(1,1,n,s[1]);
s[poz]=nmax;
Actualizare(poz);
}
return 0;
}