#include<iostream>
#include<cstdio>
#define MAX 2147483640
using namespace std;
int minim[1000001], mini=MAX, x, pos, si, sf, mnod, poz[1000000], ig;
void Inserare(int nod, int left, int right)
{
if(left==right)
{minim[nod]=x;
poz[nod]=ig;}
else
{
int mij=(left+right)/2;
if(pos<=mij)
Inserare(2*nod, left, mij);
else
Inserare(2*nod+1, mij+1, right);
if(minim[2*nod]<minim[2*nod+1])
{
minim[nod]=minim[2*nod];
poz[nod]=poz[2*nod];
}
else
{
minim[nod]=minim[2*nod+1];
poz[nod]=poz[2*nod+1];
}
}
}
void Interval(int nod, int left, int right)
{
if(si <= left && right <= sf)
{
if(minim[nod]<mini)
{mini=minim[nod];
mnod=poz[nod];
}
}
else
{
int mij=(left+right)/2;
if(si <= mij)
Interval(2*nod, left, mij);
if(mij+1<=sf)
Interval(2*nod+1, mij+1, right);
}
}
int main()
{
FILE *fin, *fout;
fin=fopen("algsort.in","r");
fout=fopen("algsort.out","w");
int i, n, st, dr, y;
fscanf(fin, "%d", &n);
for(ig=1; ig<=n; ig++)
{
fscanf(fin, "%d", &y);
x=y;
pos=ig;
Inserare(1,1,n);
}
for(int ii=0; ii<n; ii++)
{si=1;
sf=n;
Interval(1, 1,n);
fprintf(fout, "%d ", mini);
x=MAX;
pos=mnod;
ig=pos;
Inserare(1,1,n);
/*x=mini;
pos=n-ii;
ig=pos;*/
mini=MAX;}
}