#include <bits/stdc++.h>
using namespace std;
struct TreeNode{
int val;
TreeNode* right;
TreeNode* left;
TreeNode(int val):left(nullptr),right(nullptr),val(val){};
};
void helper(int c ,int r , vector<tuple<int,int,int>>&t,TreeNode* root){
if(root == nullptr)return;
t.emplace_back(c,r,root->val);
helper(c-1,r+1,t,root->left);
helper(c+1,r+1,t,root->right);
}
vector<vector<int>>vertical(TreeNode* root){
vector<tuple<int,int,int>>t;
//c,r,val
helper(0,0,t,root);
sort(t.begin(),t.end());
vector<vector<int>>ans;
int prev = INT_MIN;
for(auto [c,r,val]:t){
vector<int>curr;
if(prev != c){
ans.push_back({});
prev = c;
}
ans.back().push_back(val);
}
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<vector<int>>ans = vertical(root);
for(auto x : ans){
for(auto y : x){
cout<<y<<" ";
}
cout<<endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBUcmVlTm9kZXsKCWludCB2YWw7CglUcmVlTm9kZSogcmlnaHQ7CglUcmVlTm9kZSogbGVmdDsKCVRyZWVOb2RlKGludCB2YWwpOmxlZnQobnVsbHB0cikscmlnaHQobnVsbHB0ciksdmFsKHZhbCl7fTsKfTsKCnZvaWQgaGVscGVyKGludCBjICxpbnQgciAsIHZlY3Rvcjx0dXBsZTxpbnQsaW50LGludD4+JnQsVHJlZU5vZGUqIHJvb3QpewoJaWYocm9vdCA9PSBudWxscHRyKXJldHVybjsKCXQuZW1wbGFjZV9iYWNrKGMscixyb290LT52YWwpOwoJaGVscGVyKGMtMSxyKzEsdCxyb290LT5sZWZ0KTsKCWhlbHBlcihjKzEscisxLHQscm9vdC0+cmlnaHQpOwp9CnZlY3Rvcjx2ZWN0b3I8aW50Pj52ZXJ0aWNhbChUcmVlTm9kZSogcm9vdCl7Cgl2ZWN0b3I8dHVwbGU8aW50LGludCxpbnQ+PnQ7CgkvL2Mscix2YWwKCWhlbHBlcigwLDAsdCxyb290KTsKCXNvcnQodC5iZWdpbigpLHQuZW5kKCkpOwoJdmVjdG9yPHZlY3RvcjxpbnQ+PmFuczsKCWludCBwcmV2ID0gSU5UX01JTjsKCWZvcihhdXRvIFtjLHIsdmFsXTp0KXsKCQl2ZWN0b3I8aW50PmN1cnI7CgkJaWYocHJldiAhPSBjKXsKCQkgIGFucy5wdXNoX2JhY2soe30pOwoJCSAgcHJldiA9IGM7CgkJfQoJCWFucy5iYWNrKCkucHVzaF9iYWNrKHZhbCk7Cgl9CglyZXR1cm4gYW5zOwp9ClRyZWVOb2RlKiBidWlsZFRyZWUoKXsKCWludCB4O2Npbj4+eDsKCWlmKHg9PS0xKXJldHVybiBudWxscHRyOwoJVHJlZU5vZGUqIHJvb3QgPSBuZXcgVHJlZU5vZGUoeCk7CgkKCXF1ZXVlPFRyZWVOb2RlKj5xOwoJcS5wdXNoKHJvb3QpOwoJCgl3aGlsZSghcS5lbXB0eSgpKXsKCQlhdXRvIHUgPSBxLmZyb250KCk7CgkJcS5wb3AoKTsKCQkKCQlpZihjaW4+PnggJiYgeCE9LTEpewoJCQl1LT5sZWZ0ID0gbmV3IFRyZWVOb2RlKHgpOwoJCQlxLnB1c2godS0+bGVmdCk7CgkJfQoJCQoJCQlpZihjaW4+PnggJiYgeCE9LTEpewoJCQl1LT5yaWdodCA9IG5ldyBUcmVlTm9kZSh4KTsKCQkJcS5wdXNoKHUtPnJpZ2h0KTsKCQl9Cgl9CglyZXR1cm4gcm9vdDsKfQppbnQgbWFpbigpIHsKICAgIFRyZWVOb2RlKiByb290ID0gYnVpbGRUcmVlKCk7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+YW5zID0gdmVydGljYWwocm9vdCk7CiAgICAKICAgIGZvcihhdXRvIHggOiBhbnMpewogICAgCWZvcihhdXRvIHkgOiB4KXsKICAgIAkJY291dDw8eTw8IiAiOwogICAgCX0KICAgIAljb3V0PDxlbmRsOwogICAgfQoJcmV0dXJuIDA7Cn0=