#include<iostream>
using namespace std;
class Node{
public:
int d,w,K;
Node *l,*r;
Node(){
l=NULL;r=NULL;
d=0;
}
Node(int a){
l=NULL;r=NULL;
d=a;
}
};
class Tree{
int *k,*in,n,m,pos,pa,x,y,deep,dpt,K;
Node *root=NULL;
bool isTree(Node *r){
}
public:
Tree(){
int i,j;
cin>>n;
for(i=0;i<n;i++){
cin>>m;
root=Insert(root,m);
}
cout<<root->d;
}
int High(Node* T){
if(!T)
return 0;
int left=High(T->l)+1;
int right=High(T->r)+1;
return left>right?left:right;
}
Node* LL(Node* T){
Node* T1;
T1=T->r;
T->r=T1->l;
T1->l=T;
return T1;
}
Node* RR(Node* T){
Node* T1;
T1=T->l;
T->l=T1->r;
T1->r=T;
return T1;
}
Node* LR(Node* T){
//因为是一边插入一边平衡,导致插入后不平衡的点一定是叶子节点
//所以在调整时,T2的左右儿子均为NULL
Node* T1,*T2;
T1=T->l;
T2=T1->r;
T->l=NULL;//T->l=T2->r;
T1->r=NULL;//T1->r=T2->l;
T2->l=T1;
T2->r=T;
return T2;
}
Node* RL(Node* T){
Node* T1,*T2;
T1=T->r;
T2=T1->l;
T->r=NULL;
T1->l=NULL;
T2->l=T1;
T2->r=T1;
return T2;
}
Node* Insert(Node* T,int x){
if(!T){
T =new Node;
T->d=x;
T->l=T->r=NULL;
return T;
}else if(x>T->d){
T->r=Insert(T->r,x);
if((High(T->r)-High(T->l))>=2||(High(T->r)-High(T->l))<=-2){
if(x>T->r->d)
T=LL(T);
else
T=RL(T);
}
}else if(x<T->d){
T->l=Insert(T->l,x);
if((High(T->l)-High(T->r))==2||(High(T->l)-High(T->r))==-2){
if(x<T->l->d)
T=RR(T);
else
T=LR(T);
}
}
return T;
}
};
int main(){
int t,n,m,i,j;
char ch;
Tree tree;
return 0;
}