#include <bits/stdc++.h>
using namespace std;
struct TreeNode{
TreeNode* left;
TreeNode* right;
int data;
TreeNode(int val):data(val),left(nullptr),right(nullptr){}
};
vector<vector<int> > treeTraversal(TreeNode* root) {
vector<int>pre,post,in;
if(root == nullptr)return {in,pre,post};
stack<pair<TreeNode*,int>>st;
st.push({root,1});
while(!st.empty()){
TreeNode* one;
int two;
tie(one,two) = st.top();
st.pop();
if(two == 1){
st.push({one,2});
pre.push_back(one->data);
if(one->left){
st.push({one->left,1});
}
}else if(two == 2){
st.push({one,3});
in.push_back(one->data);
if(one->right){
st.push({one->right,1});
}
}else{
post.push_back(one->data);
}
}
return {in,pre,post};
}
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()){
TreeNode*node =q.front();q.pop();
cin>>x;
if(x!=-1){
node->left = new TreeNode(x);
q.push(node->left);
}
cin>>x;
if(x!=-1){
node->right = new TreeNode(x);
q.push(node->right);
}
}
return root;
}
int main() {
TreeNode* root = buildTree();
/** TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
**/
vector<vector<int>>ans = treeTraversal(root);
for(int val : ans[0])cout<<val<<" ";
cout<<endl;
cout<<"in"<<endl;
for(int val : ans[1])cout<<val<<" ";
cout<<endl;
cout<<"post"<<endl;
for(int val : ans[2])cout<<val<<" ";
cout<<endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBUcmVlTm9kZXsKCVRyZWVOb2RlKiBsZWZ0OwoJVHJlZU5vZGUqIHJpZ2h0OwoJaW50IGRhdGE7CglUcmVlTm9kZShpbnQgdmFsKTpkYXRhKHZhbCksbGVmdChudWxscHRyKSxyaWdodChudWxscHRyKXt9Cn07CiB2ZWN0b3I8dmVjdG9yPGludD4gPiB0cmVlVHJhdmVyc2FsKFRyZWVOb2RlKiByb290KSB7CiAJdmVjdG9yPGludD5wcmUscG9zdCxpbjsKCWlmKHJvb3QgPT0gbnVsbHB0cilyZXR1cm4ge2luLHByZSxwb3N0fTsKCQogCXN0YWNrPHBhaXI8VHJlZU5vZGUqLGludD4+c3Q7CiAJc3QucHVzaCh7cm9vdCwxfSk7CiAJCiAJd2hpbGUoIXN0LmVtcHR5KCkpewogCVRyZWVOb2RlKiBvbmU7CmludCB0d287CiAJdGllKG9uZSx0d28pID0gc3QudG9wKCk7CiAJCXN0LnBvcCgpOwogCQogCQlpZih0d28gPT0gMSl7CiAJCQlzdC5wdXNoKHtvbmUsMn0pOwogCQkJcHJlLnB1c2hfYmFjayhvbmUtPmRhdGEpOwogCQkgICAgaWYob25lLT5sZWZ0KXsKIAkJICAgIAlzdC5wdXNoKHtvbmUtPmxlZnQsMX0pOwogCQkgICAgfQogCQl9ZWxzZSBpZih0d28gPT0gMil7CiAJCQlzdC5wdXNoKHtvbmUsM30pOwogCQkJaW4ucHVzaF9iYWNrKG9uZS0+ZGF0YSk7CiAJCQlpZihvbmUtPnJpZ2h0KXsKIAkJCQlzdC5wdXNoKHtvbmUtPnJpZ2h0LDF9KTsKIAkJCX0KIAkJfWVsc2V7CiAJCQlwb3N0LnB1c2hfYmFjayhvbmUtPmRhdGEpOwogCQl9CiAJfQogCXJldHVybiB7aW4scHJlLHBvc3R9OwogfQogVHJlZU5vZGUqIGJ1aWxkVHJlZSgpewogCWludCB4O2Npbj4+eDsKIAlpZih4ID09IC0xKXJldHVybiBudWxscHRyOwogCQogCVRyZWVOb2RlKiByb290ID0gbmV3IFRyZWVOb2RlKHgpOwogCQogCXF1ZXVlPFRyZWVOb2RlKj5xOwogCXEucHVzaChyb290KTsKIAl3aGlsZSghcS5lbXB0eSgpKXsKIAkgCVRyZWVOb2RlKm5vZGUgPXEuZnJvbnQoKTtxLnBvcCgpOwogCSAJY2luPj54OwogCSAJaWYoeCE9LTEpewogCSAJCW5vZGUtPmxlZnQgPSBuZXcgVHJlZU5vZGUoeCk7CiAJIAkJcS5wdXNoKG5vZGUtPmxlZnQpOwogCSAJfQogCSAJY2luPj54OwogCSAJaWYoeCE9LTEpewogCSAJCW5vZGUtPnJpZ2h0ID0gbmV3IFRyZWVOb2RlKHgpOwogCSAJCXEucHVzaChub2RlLT5yaWdodCk7CiAJIAl9CiAJfQogCXJldHVybiByb290OwogfQppbnQgbWFpbigpIHsKCVRyZWVOb2RlKiByb290ID0gYnVpbGRUcmVlKCk7CiAgIC8qKiBUcmVlTm9kZSogcm9vdCA9IG5ldyBUcmVlTm9kZSgxKTsKICAgIHJvb3QtPmxlZnQgPSBuZXcgVHJlZU5vZGUoMik7CiAgICByb290LT5yaWdodCA9IG5ldyBUcmVlTm9kZSgzKTsKICAgIHJvb3QtPmxlZnQtPmxlZnQgPSBuZXcgVHJlZU5vZGUoNCk7CiAgICByb290LT5sZWZ0LT5yaWdodCA9IG5ldyBUcmVlTm9kZSg1KTsKICAgICoqLwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PmFucyA9IHRyZWVUcmF2ZXJzYWwocm9vdCk7CiAgICBmb3IoaW50IHZhbCA6IGFuc1swXSljb3V0PDx2YWw8PCIgIjsKICAgIGNvdXQ8PGVuZGw7CiAgICBjb3V0PDwiaW4iPDxlbmRsOwogICAgZm9yKGludCB2YWwgOiBhbnNbMV0pY291dDw8dmFsPDwiICI7CiAgICBjb3V0PDxlbmRsOwogICAgY291dDw8InBvc3QiPDxlbmRsOwogICAgZm9yKGludCB2YWwgOiBhbnNbMl0pY291dDw8dmFsPDwiICI7CiAgICBjb3V0PDxlbmRsOwogICAKCXJldHVybiAwOwp9