//Sortare Arbori de Intervale
#include <stdio.h>
#include <limits.h>
#define MAX 500005
int arb[MAX * 4];
int min(int a,int b){
if(a < b)
return a;
return b;
}
void apdeit(int nod,int st,int dr,int poz,int val){
if(st == dr){
arb[nod] = val;
return;
}
int mid = (st + dr) / 2;
if(poz <= mid)
apdeit(2 * nod,st,mid,poz,val);
else
apdeit(2 * nod + 1,mid + 1,dr,poz,val);
arb[nod] = min(arb[nod * 2],arb[nod * 2 + 1]);
}
int main(){
int n, i, v[MAX], st, dr, nod;
FILE *f, *g;
f = fopen("algsort.in","r");
g = fopen("algsort.out","w");
fscanf(f,"%d",&n);
for(i = 1;i <= n; ++i){
fscanf(f,"%d",&v[i]);
apdeit(1,1,n,i,v[i]);
}
/*for(i=1;i<=n;i++)
printf("%d ",arb[i]);*/
for(i = 1;i <= n; ++i){
fprintf(g,"%d ",arb[1]);
st = 1;
dr = n;
nod = 1;
while(st != dr){
if(arb[nod * 2] == arb[1]){
nod = nod * 2;
dr = (st + dr) / 2;}
else{
nod = nod * 2 + 1;
st = (st + dr) / 2 + 1;}
}
apdeit(1,1,n,st,INT_MAX);
}
return 0;
}