#include <bits/stdc++.h>
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int val):val(val),left(nullptr),right(nullptr){};
};
int idx;
unordered_map<int,int>mp;
TreeNode* help(vector<int>&pre,int st,int end){
if(st>end)return nullptr;
int rootVal = pre[idx--];
int mid = mp[rootVal];
TreeNode* root = new TreeNode(rootVal);
root->right = help(pre,mid+1,end);
root->left = help(pre,st,mid-1);
return root;
}
TreeNode* bt(vector<int>&post,vector<int>&in){
for(int i = 0;i<in.size();i++){
mp[in[i]] = i;
}
idx = post.size()-1;
return help(post,0,in.size()-1);
}
void print(TreeNode* root) {
if (!root) {
cout << "[]" << endl;
return;
}
vector<string> result;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* curr = q.front();
q.pop();
if (curr) {
result.push_back(to_string(curr->val));
// Push children even if they are null
q.push(curr->left);
q.push(curr->right);
} else {
result.push_back("null");
}
}
// Remove all the trailing "null"s from the back of the result
while (!result.empty() && result.back() == "null") {
result.pop_back();
}
// Print the array with brackets and commas
cout << "[";
for (int i = 0; i < result.size(); i++) {
cout << result[i];
if (i < result.size() - 1) cout << ",";
}
cout << "]" << endl;
}
int main() {
// TreeNode* root = buildTree();
int n;
cin>>n;
vector<int>post(n),in(n);
for(int i = 0;i < n ;i++){
cin>>post[i];
}
for(int i = 0;i < n ;i++){
cin>>in[i];
}
TreeNode* Croot = bt(post,in);
// preO(Croot);
print(Croot);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBUcmVlTm9kZXsKCWludCB2YWw7CglUcmVlTm9kZSogbGVmdDsKCVRyZWVOb2RlKiByaWdodDsKCQoJVHJlZU5vZGUoaW50IHZhbCk6dmFsKHZhbCksbGVmdChudWxscHRyKSxyaWdodChudWxscHRyKXt9Owp9OwppbnQgaWR4Owp1bm9yZGVyZWRfbWFwPGludCxpbnQ+bXA7ClRyZWVOb2RlKiBoZWxwKHZlY3RvcjxpbnQ+JnByZSxpbnQgc3QsaW50IGVuZCl7CgoJaWYoc3Q+ZW5kKXJldHVybiBudWxscHRyOwoJaW50IHJvb3RWYWwgPSBwcmVbaWR4LS1dOwoJaW50IG1pZCA9IG1wW3Jvb3RWYWxdOwoJCglUcmVlTm9kZSogcm9vdCA9IG5ldyBUcmVlTm9kZShyb290VmFsKTsKCXJvb3QtPnJpZ2h0ID0gaGVscChwcmUsbWlkKzEsZW5kKTsKICAgIHJvb3QtPmxlZnQgPSBoZWxwKHByZSxzdCxtaWQtMSk7CgkKCXJldHVybiByb290Owp9ClRyZWVOb2RlKiBidCh2ZWN0b3I8aW50PiZwb3N0LHZlY3RvcjxpbnQ+JmluKXsKCWZvcihpbnQgaSA9IDA7aTxpbi5zaXplKCk7aSsrKXsKCQltcFtpbltpXV0gPSBpOwoJfQoJaWR4ID0gcG9zdC5zaXplKCktMTsKCXJldHVybiBoZWxwKHBvc3QsMCxpbi5zaXplKCktMSk7Cn0KCgp2b2lkIHByaW50KFRyZWVOb2RlKiByb290KSB7CiAgICBpZiAoIXJvb3QpIHsKICAgICAgICBjb3V0IDw8ICJbXSIgPDwgZW5kbDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdmVjdG9yPHN0cmluZz4gcmVzdWx0OwogICAgcXVldWU8VHJlZU5vZGUqPiBxOwogICAgcS5wdXNoKHJvb3QpOwoKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgVHJlZU5vZGUqIGN1cnIgPSBxLmZyb250KCk7CiAgICAgICAgcS5wb3AoKTsKCiAgICAgICAgaWYgKGN1cnIpIHsKICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFjayh0b19zdHJpbmcoY3Vyci0+dmFsKSk7CiAgICAgICAgICAgIC8vIFB1c2ggY2hpbGRyZW4gZXZlbiBpZiB0aGV5IGFyZSBudWxsCiAgICAgICAgICAgIHEucHVzaChjdXJyLT5sZWZ0KTsKICAgICAgICAgICAgcS5wdXNoKGN1cnItPnJpZ2h0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKCJudWxsIik7CiAgICAgICAgfQogICAgfQoKICAgIC8vIFJlbW92ZSBhbGwgdGhlIHRyYWlsaW5nICJudWxsInMgZnJvbSB0aGUgYmFjayBvZiB0aGUgcmVzdWx0CiAgICB3aGlsZSAoIXJlc3VsdC5lbXB0eSgpICYmIHJlc3VsdC5iYWNrKCkgPT0gIm51bGwiKSB7CiAgICAgICAgcmVzdWx0LnBvcF9iYWNrKCk7CiAgICB9CgogICAgLy8gUHJpbnQgdGhlIGFycmF5IHdpdGggYnJhY2tldHMgYW5kIGNvbW1hcwogICAgY291dCA8PCAiWyI7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7IGkrKykgewogICAgICAgIGNvdXQgPDwgcmVzdWx0W2ldOwogICAgICAgIGlmIChpIDwgcmVzdWx0LnNpemUoKSAtIDEpIGNvdXQgPDwgIiwiOwogICAgfQogICAgY291dCA8PCAiXSIgPDwgZW5kbDsKfQppbnQgbWFpbigpIHsKLy8JVHJlZU5vZGUqIHJvb3QgID0gYnVpbGRUcmVlKCk7CglpbnQgbjsKCWNpbj4+bjsKCXZlY3RvcjxpbnQ+cG9zdChuKSxpbihuKTsKCQoJZm9yKGludCBpID0gMDtpIDwgbiA7aSsrKXsKCQljaW4+PnBvc3RbaV07Cgl9CgkKCQlmb3IoaW50IGkgPSAwO2kgPCBuIDtpKyspewoJCWNpbj4+aW5baV07Cgl9CgkKCVRyZWVOb2RlKiBDcm9vdCA9IGJ0KHBvc3QsaW4pOwovLwlwcmVPKENyb290KTsKCXByaW50KENyb290KTsKCXJldHVybiAwOwp9