#include<bits/stdc++.h>
using namespace std;
class Splay_Tree{
private:
struct node{
int left,right,val,fa,cnt,siz;
}Tr[100050];
int x,nth,root;
public:
bool son(int no){
return Tr[Tr[no].fa].right==no;
}
void update(int no){
Tr[no].siz=Tr[no].cnt+Tr[Tr[no].left].siz+Tr[Tr[no].right].siz;
}
void rotate(int no){
if(no==root)return;
int tmp=Tr[no].fa,tmp2=Tr[tmp].fa,flag=son(tmp);
if(son(no)){
Tr[tmp].right=Tr[no].left;
if(Tr[no].left)Tr[Tr[no].left].fa=tmp;
Tr[no].left=tmp;
}
else{
Tr[tmp].left=Tr[no].right;
if(Tr[no].right)Tr[Tr[no].right].fa=tmp;
Tr[no].right=tmp;
}
Tr[tmp].fa=no;
if(tmp==root){Tr[no].fa=0;root=no;return;}
Tr[no].fa=tmp2;
if(flag)Tr[tmp2].right=no;
else Tr[tmp2].left=no;
update(tmp);
update(no);
}
void splay(int no){
int tmp;
while(no!=root){
tmp=Tr[no].fa;
if(son(no)==son(tmp))rotate(tmp);
rotate(no);
}
}
void ins(int &no,int f){
if(no==0){
no=++nth;
Tr[no].fa=f;
Tr[no].cnt=Tr[no].siz=1;
Tr[no].val=x;
splay(no);
return;
}if(x==Tr[no].val){
Tr[no].cnt++;
Tr[no].siz++;
splay(no);
return;
}if(x<Tr[no].val)ins(Tr[no].left,no);
else ins(Tr[no].right,no);
update(no);
}
void insert(int value){
x=value;
ins(root,0);
}
void build(){
insert(2147483647);
insert(-2147483647);
}
void bl(int no){
if(no==0)return;
bl(Tr[no].left);
for(int i=1;i<=Tr[no].cnt;i++)cout<<Tr[no].val<<" ";
bl(Tr[no].right);
}
void check(){
bl(root);
puts("");
}
}T;
int n,op,x;
int main()
{
cin>>n;
while(n--){
cin>>x;
T.insert(x);
}T.check();
return 0;
}