#include <iostream>
using namespace std;
int ans = 0;
struct Node{
int data;
struct Node* left;
struct Node* right;
struct Node* maxnode;
Node(int val, Node* l = NULL, Node* r = NULL,Node* maxn=NULL){
data = val;
left = l;
right = r;
maxnode=maxn;
}
};
class BinaryTree{
Node* Root;
Node* X;
Node* Y;
public:
BinaryTree(){
Root = NULL;
}
void Construct(){
Node* h = new Node(1);
Node* i = new Node(2);
Node* j = new Node(1000);
Node* k = new Node(2000);
Node* l = new Node(1);
Node* m = new Node(2);
Node* n = new Node(1);
Node* o = new Node(2);
Node* d = new Node(1,h,i);
Node* e = new Node(100,j,k);
Node* f = new Node(1,l,m);
Node* g = new Node(2,n,o);
Node* b = new Node(100,d,e);
Node* c = new Node(1,f,g);
Node* a = new Node(100,b,c);
Root = a;
}
bool isleaf(Node *temp)
{
if(temp==NULL)
return false;
if(temp->left==NULL && temp->right==NULL)
return true;
return false;
}
void printX()
{
cout<<"X: "<<X->data<<endl;
}
void printY()
{
cout<<"Y: "<<Y->data<<endl;
}
void PrintInOrder(Node *temp){
if(temp != NULL){
PrintInOrder(temp -> left);
cout << temp -> data << endl;
PrintInOrder(temp -> right);
}
}
void PrintBT(){
PrintInOrder(Root);
}
void Solve(){
Solve(Root,0);
}
int Solve(Node *curr, int sumFromParent){
if(curr == NULL) return 0;
int sumFromRootToCurr = sumFromParent + curr -> data;
int lMaxFromLeaf = Solve(curr -> left, sumFromRootToCurr);
int rMaxFromLeaf = Solve(curr -> right, sumFromRootToCurr);
if(isleaf(curr))
{
curr->maxnode=curr;
}
if(lMaxFromLeaf>=rMaxFromLeaf && curr->left!=NULL)
{
curr->maxnode=curr->left->maxnode;
}
if(rMaxFromLeaf>lMaxFromLeaf && curr->right!=NULL)
{
curr->maxnode=curr->right->maxnode;
}
if((sumFromRootToCurr + lMaxFromLeaf + rMaxFromLeaf)>ans)
{
if(curr->left!=NULL)
X=curr->left->maxnode;
if(curr->right!=NULL)
Y=curr->right->maxnode;
}
ans = max(ans,sumFromRootToCurr + lMaxFromLeaf + rMaxFromLeaf);
return (curr -> data + max(lMaxFromLeaf,rMaxFromLeaf));
}
};
int main(){
BinaryTree bt;
bt.Construct();
//bt.PrintBT();
bt.Solve();
cout << ans << endl;
bt.printX();
bt.printY();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmludCBhbnMgPSAwOwogCnN0cnVjdCBOb2RlewogICAgICAgIGludCBkYXRhOwogICAgICAgIHN0cnVjdCBOb2RlKiBsZWZ0OwogICAgICAgIHN0cnVjdCBOb2RlKiByaWdodDsKICAgICAgICBzdHJ1Y3QgTm9kZSogbWF4bm9kZTsKICAgICAgICBOb2RlKGludCB2YWwsIE5vZGUqIGwgPSBOVUxMLCBOb2RlKiByID0gTlVMTCxOb2RlKiBtYXhuPU5VTEwpewogICAgICAgICAgICAgICAgZGF0YSA9IHZhbDsKICAgICAgICAgICAgICAgIGxlZnQgPSBsOwogICAgICAgICAgICAgICAgcmlnaHQgPSByOwogICAgICAgICAgICAgICAgbWF4bm9kZT1tYXhuOwogICAgICAgIH0KfTsKIApjbGFzcyBCaW5hcnlUcmVlewogICAgICAgIE5vZGUqIFJvb3Q7CiAgICAgICAgTm9kZSogWDsKICAgICAgICBOb2RlKiBZOwogICAgICAgIAogICAgICAgIHB1YmxpYzoKICAgICAgICBCaW5hcnlUcmVlKCl7CiAgICAgICAgICAgICAgICBSb290ID0gTlVMTDsKICAgICAgICB9CiAgICAgICAgdm9pZCBDb25zdHJ1Y3QoKXsKICAgICAgICAgICAgICAgIE5vZGUqIGggPSBuZXcgTm9kZSgxKTsKICAgICAgICAgICAgICAgIE5vZGUqIGkgPSBuZXcgTm9kZSgyKTsKICAgICAgICAgICAgICAgIE5vZGUqIGogPSBuZXcgTm9kZSgxMDAwKTsKICAgICAgICAgICAgICAgIE5vZGUqIGsgPSBuZXcgTm9kZSgyMDAwKTsKICAgICAgICAgICAgICAgIE5vZGUqIGwgPSBuZXcgTm9kZSgxKTsKICAgICAgICAgICAgICAgIE5vZGUqIG0gPSBuZXcgTm9kZSgyKTsKICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBuZXcgTm9kZSgxKTsKICAgICAgICAgICAgICAgIE5vZGUqIG8gPSBuZXcgTm9kZSgyKTsKICAgICAgICAgICAgICAgIE5vZGUqIGQgPSBuZXcgTm9kZSgxLGgsaSk7CiAgICAgICAgICAgICAgICBOb2RlKiBlID0gbmV3IE5vZGUoMTAwLGosayk7CiAgICAgICAgICAgICAgICBOb2RlKiBmID0gbmV3IE5vZGUoMSxsLG0pOwogICAgICAgICAgICAgICAgTm9kZSogZyA9IG5ldyBOb2RlKDIsbixvKTsKICAgICAgICAgICAgICAgIE5vZGUqIGIgPSBuZXcgTm9kZSgxMDAsZCxlKTsKICAgICAgICAgICAgICAgIE5vZGUqIGMgPSBuZXcgTm9kZSgxLGYsZyk7CiAgICAgICAgICAgICAgICBOb2RlKiBhID0gbmV3IE5vZGUoMTAwLGIsYyk7CiAgICAgICAgICAgICAgICBSb290ID0gYTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgYm9vbCBpc2xlYWYoTm9kZSAqdGVtcCkKICAgICAgICB7CiAgICAgICAgICAgIGlmKHRlbXA9PU5VTEwpCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGlmKHRlbXAtPmxlZnQ9PU5VTEwgJiYgdGVtcC0+cmlnaHQ9PU5VTEwpCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2b2lkIHByaW50WCgpCiAgICAgICAgewogICAgICAgICAgICBjb3V0PDwiWDogIjw8WC0+ZGF0YTw8ZW5kbDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdm9pZCBwcmludFkoKQogICAgICAgIHsKICAgICAgICAgICAgY291dDw8Ilk6ICI8PFktPmRhdGE8PGVuZGw7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZvaWQgUHJpbnRJbk9yZGVyKE5vZGUgKnRlbXApewogICAgICAgICAgICAgICAgaWYodGVtcCAhPSBOVUxMKXsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRJbk9yZGVyKHRlbXAgLT4gbGVmdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgdGVtcCAtPiBkYXRhIDw8IGVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW50SW5PcmRlcih0ZW1wIC0+IHJpZ2h0KTsgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdm9pZCBQcmludEJUKCl7CiAgICAgICAgICAgICAgICBQcmludEluT3JkZXIoUm9vdCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZvaWQgU29sdmUoKXsKICAgICAgICAgICAgICAgIFNvbHZlKFJvb3QsMCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGludCBTb2x2ZShOb2RlICpjdXJyLCBpbnQgc3VtRnJvbVBhcmVudCl7CiAgICAgICAgICAgICAgICBpZihjdXJyID09IE5VTEwpIHJldHVybiAwOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpbnQgc3VtRnJvbVJvb3RUb0N1cnIgPSBzdW1Gcm9tUGFyZW50ICsgY3VyciAtPiBkYXRhOwogICAgICAgICAgICAgICAgaW50IGxNYXhGcm9tTGVhZiA9IFNvbHZlKGN1cnIgLT4gbGVmdCwgc3VtRnJvbVJvb3RUb0N1cnIpOwogICAgICAgICAgICAgICAgaW50IHJNYXhGcm9tTGVhZiA9IFNvbHZlKGN1cnIgLT4gcmlnaHQsIHN1bUZyb21Sb290VG9DdXJyKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmKGlzbGVhZihjdXJyKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjdXJyLT5tYXhub2RlPWN1cnI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihsTWF4RnJvbUxlYWY+PXJNYXhGcm9tTGVhZiAmJiBjdXJyLT5sZWZ0IT1OVUxMKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGN1cnItPm1heG5vZGU9Y3Vyci0+bGVmdC0+bWF4bm9kZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKHJNYXhGcm9tTGVhZj5sTWF4RnJvbUxlYWYgJiYgY3Vyci0+cmlnaHQhPU5VTEwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY3Vyci0+bWF4bm9kZT1jdXJyLT5yaWdodC0+bWF4bm9kZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYoKHN1bUZyb21Sb290VG9DdXJyICsgbE1heEZyb21MZWFmICsgck1heEZyb21MZWFmKT5hbnMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYoY3Vyci0+bGVmdCE9TlVMTCkKICAgICAgICAgICAgICAgICAgICAgICAgWD1jdXJyLT5sZWZ0LT5tYXhub2RlOwogICAgICAgICAgICAgICAgICAgIGlmKGN1cnItPnJpZ2h0IT1OVUxMKQogICAgICAgICAgICAgICAgICAgICAgICBZPWN1cnItPnJpZ2h0LT5tYXhub2RlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBhbnMgPSBtYXgoYW5zLHN1bUZyb21Sb290VG9DdXJyICsgbE1heEZyb21MZWFmICsgck1heEZyb21MZWFmKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgcmV0dXJuIChjdXJyIC0+IGRhdGEgICsgbWF4KGxNYXhGcm9tTGVhZixyTWF4RnJvbUxlYWYpKTsgICAgICAgIAogICAgICAgIH0KfTsKIAppbnQgbWFpbigpewogICAgICAgIEJpbmFyeVRyZWUgYnQ7CiAgICAgICAgYnQuQ29uc3RydWN0KCk7CiAgICAgICAgLy9idC5QcmludEJUKCk7CiAgICAgICAgYnQuU29sdmUoKTsKICAgICAgICBjb3V0IDw8IGFucyA8PCBlbmRsOwogICAgICAgIGJ0LnByaW50WCgpOwogICAgICAgIGJ0LnByaW50WSgpOwogICAgICAKfQo=