#include<fstream>
#include<cmath>
#include<algorithm>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
long int i,vi[500005],vf[500005],n,li,le,in[1000];
void reface_minim(int poz)
{
for(i=poz*le;i<(poz+1)*le&&i<n;i++)
if(in[poz]>vi[i])
in[poz]=vi[i];
}
void cauta_element(int x, int poz)
{
in[poz]=2147483647;
int ok=1;
for(i=poz*le;i<(poz+1)*le&&i<n;i++)
if (vi[i]==x&&ok)
ok=0,vi[i]=-1;
else
if(in[poz]>vi[i]&&vi[i]>=0)
in[poz]=vi[i];
}
int cauta_minim()
{
int minim=2147483647,indmin=li;
for(i=0;i<li;i++)
if(in[i]<minim&&in[i]>=0)
minim=in[i],indmin=i;
cauta_element(minim,indmin);
return minim;
}
int main()
{
f>>n;
le=sqrt(n)+1;
li=le+!!(n-le*le);
for(i=0;i<n;i++)
f>>vi[i];
for (i=0;i<1000;i++)
in[i]=2147483647;
for(i=0;i<n;i++)
if(in[i/le]>vi[i])
in[i/le]=vi[i];
for(i=0;i<n;i++)
vf[i]=cauta_minim();
for(i=0;i<n;i++)
g<<vf[i]<<' ';
}