#include <iostream>
#include <algorithm>
using namespace std;
struct node {
int data;
struct node * left;
struct node * right;
} * root = NULL;
struct node * insertNode(struct node * tNode, int value) {
if(tNode == NULL) {
struct node * newNode = (struct node *)malloc(sizeof(struct node));
newNode->data = value;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
if(tNode->data > value)
tNode->left = insertNode(tNode->left, value);
else
tNode->right = insertNode(tNode->right, value);
return tNode;
}
void buildTree(int a[], int N) {
for(int i = 0; i < N; i++) {
if(i) {
insertNode(root, a[i]);
} else {
root = insertNode(NULL, a[i]);
}
}
}
int secondSmallestInBST(struct node * tNode) {
if( tNode==NULL || (tNode->left==NULL && tNode->right==NULL) ) // case 1 and 2
exit;
if(tNode->left == NULL){ // case 3
tNode=tNode->right;
while(tNode->left!=NULL){
tNode=tNode->left;
}
return tNode->data;
} // general case.
node * parent=tNode,* child = tNode->left;
while(child->left!=NULL){
parent = child;
child = child->left;
}
return parent->data;
}
int main() {
int N;
cin >> N;
int arr[N];
for(int i = 0; i < N; i++) {
cin >> arr[i];
}
buildTree(arr, N);
cout << secondSmallestInBST(root) << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdHJ1Y3Qgbm9kZSB7CglpbnQgZGF0YTsKCXN0cnVjdCBub2RlICogbGVmdDsKCXN0cnVjdCBub2RlICogcmlnaHQ7Cn0gKiByb290ID0gTlVMTDsKCnN0cnVjdCBub2RlICogaW5zZXJ0Tm9kZShzdHJ1Y3Qgbm9kZSAqIHROb2RlLCBpbnQgdmFsdWUpIHsKCWlmKHROb2RlID09IE5VTEwpIHsKCQlzdHJ1Y3Qgbm9kZSAqIG5ld05vZGUgPSAoc3RydWN0IG5vZGUgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CgkJbmV3Tm9kZS0+ZGF0YSA9IHZhbHVlOwoJCW5ld05vZGUtPmxlZnQgPSBOVUxMOwoJCW5ld05vZGUtPnJpZ2h0ID0gTlVMTDsKCQlyZXR1cm4gbmV3Tm9kZTsKCX0KCWlmKHROb2RlLT5kYXRhID4gdmFsdWUpCgkJdE5vZGUtPmxlZnQgPSBpbnNlcnROb2RlKHROb2RlLT5sZWZ0LCB2YWx1ZSk7CgllbHNlCgkJdE5vZGUtPnJpZ2h0ID0gaW5zZXJ0Tm9kZSh0Tm9kZS0+cmlnaHQsIHZhbHVlKTsKCXJldHVybiB0Tm9kZTsKfQoKdm9pZCBidWlsZFRyZWUoaW50IGFbXSwgaW50IE4pIHsKCWZvcihpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKCQlpZihpKSB7CgkJCWluc2VydE5vZGUocm9vdCwgYVtpXSk7CgkJfSBlbHNlIHsKCQkJcm9vdCA9IGluc2VydE5vZGUoTlVMTCwgYVtpXSk7CgkJfQoJfQp9CgppbnQgc2Vjb25kU21hbGxlc3RJbkJTVChzdHJ1Y3Qgbm9kZSAqIHROb2RlKSB7CiAgICBpZiggdE5vZGU9PU5VTEwgfHwgKHROb2RlLT5sZWZ0PT1OVUxMICYmIHROb2RlLT5yaWdodD09TlVMTCkgKSAgLy8gY2FzZSAxIGFuZCAyCiAgICAgICAgZXhpdDsKICAgIGlmKHROb2RlLT5sZWZ0ID09IE5VTEwpeyAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgMwogICAgICAgIHROb2RlPXROb2RlLT5yaWdodDsKICAgICAgICB3aGlsZSh0Tm9kZS0+bGVmdCE9TlVMTCl7CiAgICAgICAgICAgIHROb2RlPXROb2RlLT5sZWZ0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gdE5vZGUtPmRhdGE7CiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZW5lcmFsIGNhc2UuCiAgICBub2RlICogcGFyZW50PXROb2RlLCogY2hpbGQgPSB0Tm9kZS0+bGVmdDsKICAgIHdoaWxlKGNoaWxkLT5sZWZ0IT1OVUxMKXsKICAgIAlwYXJlbnQgPSBjaGlsZDsKICAgIAljaGlsZCA9IGNoaWxkLT5sZWZ0OwogICAgfQogICAgcmV0dXJuIHBhcmVudC0+ZGF0YTsKfQoKCgppbnQgbWFpbigpIHsKCWludCBOOwoJY2luID4+IE47CglpbnQgYXJyW05dOwoJZm9yKGludCBpID0gMDsgaSA8IE47IGkrKykgewoJCWNpbiA+PiBhcnJbaV07Cgl9CglidWlsZFRyZWUoYXJyLCBOKTsKCWNvdXQgPDwgc2Vjb25kU21hbGxlc3RJbkJTVChyb290KSA8PCBlbmRsOwp9