#include <bits/stdc++.h>
using namespace std;
struct TreeNode{
int data;
TreeNode* left;
TreeNode* right;
TreeNode(int val):left(nullptr),right(nullptr),data(val){};
};
bool isLeaf(TreeNode* root){
return !root->right && !root->left;
}
void leftb(TreeNode* root,vector<int>&ans){
TreeNode* curr=root->left;
while(curr){
if(!isLeaf(curr)){
ans.push_back(curr->data);
}
if(curr->left){
curr= curr->left;
}else{
curr = curr->right;
}
}
}
void rightb(TreeNode* root,vector<int>&ans){
TreeNode* curr=root->right;
vector<int>temp;
while(curr){
if(!isLeaf(curr)){
temp.push_back(curr->data);
}
if(curr->right){
curr= curr->left;
}else{
curr = curr->left;
}
}
for(int i =temp.size()-1;i>=0;i--){
ans.push_back(temp[i]);
}
}
void addLeaves(TreeNode* root,vector<int>&ans){
if(isLeaf(root))ans.push_back(root->data);
if(root->left){
addLeaves(root->left,ans);
}
if(root->right){
addLeaves(root->right,ans);
}
}
vector<int>bound(TreeNode*root){
vector<int>ans;
if(!root)return ans;
if(!isLeaf(root))ans.push_back(root->data);
leftb(root,ans);
addLeaves(root,ans);
rightb(root,ans);
return ans;
}
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;
}
int main() {
TreeNode* root = buildTree();
vector<int>ans = bound(root);
for(auto&x : ans){
cout<<x << " ";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBUcmVlTm9kZXsKCWludCBkYXRhOwoJVHJlZU5vZGUqIGxlZnQ7CglUcmVlTm9kZSogcmlnaHQ7CglUcmVlTm9kZShpbnQgdmFsKTpsZWZ0KG51bGxwdHIpLHJpZ2h0KG51bGxwdHIpLGRhdGEodmFsKXt9Owp9Owpib29sIGlzTGVhZihUcmVlTm9kZSogcm9vdCl7CglyZXR1cm4gIXJvb3QtPnJpZ2h0ICYmICFyb290LT5sZWZ0Owp9CnZvaWQgbGVmdGIoVHJlZU5vZGUqIHJvb3QsdmVjdG9yPGludD4mYW5zKXsKCVRyZWVOb2RlKiBjdXJyPXJvb3QtPmxlZnQ7CgkKCXdoaWxlKGN1cnIpewoJCWlmKCFpc0xlYWYoY3VycikpewoJCQlhbnMucHVzaF9iYWNrKGN1cnItPmRhdGEpOwoJCX0KCQkKCQlpZihjdXJyLT5sZWZ0KXsKCQkgICBjdXJyPSBjdXJyLT5sZWZ0OwoJCX1lbHNlewoJCQljdXJyID0gY3Vyci0+cmlnaHQ7CgkJfQoJfQp9CnZvaWQgcmlnaHRiKFRyZWVOb2RlKiByb290LHZlY3RvcjxpbnQ+JmFucyl7CglUcmVlTm9kZSogY3Vycj1yb290LT5yaWdodDsKCXZlY3RvcjxpbnQ+dGVtcDsKCXdoaWxlKGN1cnIpewoJCWlmKCFpc0xlYWYoY3VycikpewoJCQl0ZW1wLnB1c2hfYmFjayhjdXJyLT5kYXRhKTsKCQl9CgkJCgkJaWYoY3Vyci0+cmlnaHQpewoJCSAgIGN1cnI9IGN1cnItPmxlZnQ7CgkJfWVsc2V7CgkJCWN1cnIgPSBjdXJyLT5sZWZ0OwoJCX0KCX0KCQoJZm9yKGludCBpID10ZW1wLnNpemUoKS0xO2k+PTA7aS0tKXsKCQlhbnMucHVzaF9iYWNrKHRlbXBbaV0pOwoJfQp9Cgp2b2lkIGFkZExlYXZlcyhUcmVlTm9kZSogcm9vdCx2ZWN0b3I8aW50PiZhbnMpewoJaWYoaXNMZWFmKHJvb3QpKWFucy5wdXNoX2JhY2socm9vdC0+ZGF0YSk7CglpZihyb290LT5sZWZ0KXsKCQlhZGRMZWF2ZXMocm9vdC0+bGVmdCxhbnMpOwoJfQoJaWYocm9vdC0+cmlnaHQpewoJCWFkZExlYXZlcyhyb290LT5yaWdodCxhbnMpOwoJfQp9Cgp2ZWN0b3I8aW50PmJvdW5kKFRyZWVOb2RlKnJvb3QpewoJdmVjdG9yPGludD5hbnM7CglpZighcm9vdClyZXR1cm4gYW5zOwoJCglpZighaXNMZWFmKHJvb3QpKWFucy5wdXNoX2JhY2socm9vdC0+ZGF0YSk7CgkKCWxlZnRiKHJvb3QsYW5zKTsKCWFkZExlYXZlcyhyb290LGFucyk7CglyaWdodGIocm9vdCxhbnMpOwoJcmV0dXJuIGFuczsKfQpUcmVlTm9kZSogYnVpbGRUcmVlKCl7CglpbnQgeDtjaW4+Png7CglpZih4ID09IC0xKXJldHVybiBudWxscHRyOwoJVHJlZU5vZGUqIHJvb3QgPSBuZXcgVHJlZU5vZGUoeCk7CiAKCXF1ZXVlPFRyZWVOb2RlKj5xOwoJcS5wdXNoKHJvb3QpOwogCgl3aGlsZSghcS5lbXB0eSgpKXsKCQlhdXRvIHUgPSBxLmZyb250KCk7CgkJcS5wb3AoKTsKIAoJCWlmKGNpbj4+eCAmJiB4IT0tMSl7CgkJCXUtPmxlZnQ9bmV3IFRyZWVOb2RlKHgpOwoJCQlxLnB1c2godS0+bGVmdCk7CgkJfQogCgkJCWlmKGNpbj4+eCAmJiB4IT0tMSl7CgkJCXUtPnJpZ2h0PW5ldyBUcmVlTm9kZSh4KTsKCQkJcS5wdXNoKHUtPnJpZ2h0KTsKCQl9Cgl9CglyZXR1cm4gcm9vdDsKfQppbnQgbWFpbigpIHsKCVRyZWVOb2RlKiByb290ID0gYnVpbGRUcmVlKCk7CiAgICB2ZWN0b3I8aW50PmFucyA9IGJvdW5kKHJvb3QpOwoJZm9yKGF1dG8meCA6IGFucyl7CgkJY291dDw8eCA8PCAiICI7Cgl9CglyZXR1cm4gMDsKfQ==