#include <bits/stdc++.h>
using namespace std;
struct TreeNode{
int val;
TreeNode* right;
TreeNode* left;
TreeNode(int val) : left(nullptr),right(nullptr),val(val){};
};
TreeNode* lca(TreeNode* root,TreeNode* p,TreeNode* q){
if(root == nullptr)return nullptr;
if(p == root || q == root)return root;
TreeNode* left = lca(root->left,p,q);
TreeNode* right = lca(root->right,p,q);
if(left != nullptr && right != nullptr) {
return root;
}
return left == nullptr?right:left;
}
TreeNode* buildTree(){
int x;
cin>>x;
if(x==-1)return nullptr;
TreeNode* root = new TreeNode(x);
queue<TreeNode*>q;
q.push(root);
while(!q.empty()){
auto u = q.front();q.pop();
if(cin>>x && x!=-1){
u->left = new TreeNode(x);
q.push(u->left);
}
if(cin>>x && x!=-1){
u->right = new TreeNode(x);
q.push(u->right);
}
}
return root;
}
TreeNode* find(TreeNode* root,int val){
if(!root)return nullptr;
if(root->val == val)return root;
TreeNode* left = find(root->left,val);
if(left)return left;
return find(root->right,val);
}
int main() {
TreeNode* root = buildTree();
int val1,val2; cin>>val1 >>val2;
TreeNode* p = find(root,val1);
TreeNode* q = find(root,val2);
TreeNode* res = lca(root,p,q);
if(res) {
cout << res->val << endl;
} else {
cout << "Error: Could not find the nodes. Check your input!" << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgVHJlZU5vZGV7CglpbnQgdmFsOwoJVHJlZU5vZGUqIHJpZ2h0OwoJVHJlZU5vZGUqIGxlZnQ7CgkKCVRyZWVOb2RlKGludCB2YWwpIDogbGVmdChudWxscHRyKSxyaWdodChudWxscHRyKSx2YWwodmFsKXt9Owp9OwpUcmVlTm9kZSogbGNhKFRyZWVOb2RlKiByb290LFRyZWVOb2RlKiBwLFRyZWVOb2RlKiBxKXsKCWlmKHJvb3QgPT0gbnVsbHB0cilyZXR1cm4gbnVsbHB0cjsKCWlmKHAgPT0gcm9vdCB8fCBxID09IHJvb3QpcmV0dXJuIHJvb3Q7CgkKCVRyZWVOb2RlKiBsZWZ0ID0gbGNhKHJvb3QtPmxlZnQscCxxKTsKCVRyZWVOb2RlKiByaWdodCA9IGxjYShyb290LT5yaWdodCxwLHEpOwoJaWYobGVmdCAhPSBudWxscHRyICYmIHJpZ2h0ICE9IG51bGxwdHIpIHsKICAgICAgICByZXR1cm4gcm9vdDsKICAgIH0KCXJldHVybiBsZWZ0ID09IG51bGxwdHI/cmlnaHQ6bGVmdDsKfQoKClRyZWVOb2RlKiBidWlsZFRyZWUoKXsKCWludCB4OwoJY2luPj54OwoJaWYoeD09LTEpcmV0dXJuIG51bGxwdHI7CgkKCVRyZWVOb2RlKiByb290ID0gbmV3IFRyZWVOb2RlKHgpOwoJCglxdWV1ZTxUcmVlTm9kZSo+cTsKCQoJcS5wdXNoKHJvb3QpOwoJCgl3aGlsZSghcS5lbXB0eSgpKXsKCQlhdXRvIHUgPSBxLmZyb250KCk7cS5wb3AoKTsKCQkKCQlpZihjaW4+PnggJiYgeCE9LTEpewoJCQl1LT5sZWZ0ID0gbmV3IFRyZWVOb2RlKHgpOwoJCQlxLnB1c2godS0+bGVmdCk7CgkJfQoJCQoJCWlmKGNpbj4+eCAmJiB4IT0tMSl7CgkJCXUtPnJpZ2h0ID0gbmV3IFRyZWVOb2RlKHgpOwoJCQlxLnB1c2godS0+cmlnaHQpOwoJCX0KCX0KCXJldHVybiByb290Owp9ClRyZWVOb2RlKiBmaW5kKFRyZWVOb2RlKiByb290LGludCB2YWwpewoJaWYoIXJvb3QpcmV0dXJuIG51bGxwdHI7CglpZihyb290LT52YWwgPT0gdmFsKXJldHVybiByb290OwoJCglUcmVlTm9kZSogbGVmdCA9IGZpbmQocm9vdC0+bGVmdCx2YWwpOwoJCglpZihsZWZ0KXJldHVybiBsZWZ0OwoJcmV0dXJuIGZpbmQocm9vdC0+cmlnaHQsdmFsKTsKfQppbnQgbWFpbigpIHsKICAgIFRyZWVOb2RlKiByb290ID0gYnVpbGRUcmVlKCk7CiAgIGludCB2YWwxLHZhbDI7IGNpbj4+dmFsMSA+PnZhbDI7CiAgICBUcmVlTm9kZSogcCA9IGZpbmQocm9vdCx2YWwxKTsKICAgIFRyZWVOb2RlKiBxID0gZmluZChyb290LHZhbDIpOwogICAgCiAgICBUcmVlTm9kZSogcmVzID0gbGNhKHJvb3QscCxxKTsKICAgaWYocmVzKSB7CiAgICAgICAgY291dCA8PCByZXMtPnZhbCA8PCBlbmRsOwogICAgfSBlbHNlIHsKICAgICAgICBjb3V0IDw8ICJFcnJvcjogQ291bGQgbm90IGZpbmQgdGhlIG5vZGVzLiBDaGVjayB5b3VyIGlucHV0ISIgPDwgZW5kbDsKICAgIH0KICAgIAoJcmV0dXJuIDA7Cn0=