#include<ctime>
#include<fstream>
#define FOR(a,b,c) for(register int a=b;a<=c;++a)
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n,x;
struct Treap
{
Treap *l,*r;
int key,pr;
Treap() {}
Treap(int _key,int _pr)
{
l=r=NULL;
key=_key;
pr=_pr;
}
};
#define T Treap*
T R;
void split(T t,int k,T &l,T &r)
{
if(!t)
l=r=NULL;
else
if(k<t->key)
split(t->l,k,l,t->l),r=t;
else
split(t->r,k,t->r,r),l=t;
}
void merge(T &t,T l,T r)
{
if(!l||!r)
t=l?l:r;
else
if(l->pr > r->pr)
merge(l->r,l->r,r),t=l;
else
merge(r->l,l,r->l),t=r;
}
void insert(T &t,T it)
{
if(!t)
t=it;
else
if(it->pr > t->pr)
split(t,it->key,it->l,it->r),t=it;
else
insert(it->key>t->key?t->r:t->l,it);
}
void erase(T &t,int k)
{
if(t->key==k)
merge(t,t->l,t->r);
else
erase(k>t->key?t->r:t->l,k);
}
void dfs(T t)
{
if(!t)
return;
dfs(t->l);
g<<t->key<<" ";
dfs(t->r);
}
int main ()
{
srand(time(0));
f>>n;
FOR(i,1,n)
{
f>>x;
T it=new Treap(x,rand()+1);
insert(R,it);
}
dfs(R);
return 0;
}