#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
struct TNode{
int value = -1;
TNode *left = NULL;
TNode *right = NULL;
};
vector<TNode*> arr;
bool cmp(TNode *a,TNode *b){
return a->value >= b->value;
}
void preShow(TNode *root){
if(root){
printf("%d ",root->value);
preShow(root->left);
preShow(root->right);
}
}
int main(){
int inp[5]={1,2,3,4,5};
for(int i=0;i<5;i++){
TNode *s=new TNode;
s->value=inp[i];
arr.push_back(s);
}
make_heap(arr.begin(),arr.end(),cmp);
int i=0;
while(arr.size()>1){
TNode *s=new TNode;
TNode *l,*r;
l=arr[0];
pop_heap(arr.begin(),arr.end(),cmp);
arr.pop_back();
printf("%d ",l->value);
r=arr[0];
pop_heap(arr.begin(),arr.end(),cmp);
arr.pop_back();
printf("%d \n",r->value);
s->left=l;
s->right=r;
s->value=l->value+r->value;
arr.push_back(s);
push_heap(arr.begin(),arr.end(),cmp);
}
preShow(arr[0]);
return 0;
}