#include #include #include using namespace std; void input(vector& pre, vector& in) { int n; cin >> n; for (int i = 0; i < n; i++) { int x; cin >> x; pre.push_back(x); } for (int i = 0; i < n; i++) { int x; cin >> x; in.push_back(x); } } void solve(vector& pre, vector& in, vector& post, vector::iterator left, vector::iterator right, int i) { if (i >= pre.size()) return; if (left >= right) return; if (left == right - 1) { post.push_back(*left); return; } auto pos = find(left, right, pre[i]); solve(pre, in, post, left, pos, i + 1); solve(pre, in, post, pos + 1, right, distance(in.begin(), pos) + 1); if (find(post.begin(), post.end(), pre[i]) == post.end()) post.push_back(pre[i]); } void output(vector& post) { for (auto i = post.begin(); i != post.end(); i++) cout << *i << " "; cout << "\n"; } int main() { ios_base::sync_with_stdio(0); int z; cin >> z; while (z--) { vector preorder; vector inorder; vector postorder; input(preorder, inorder); solve(preorder, inorder, postorder, inorder.begin(), inorder.end(),0); output(postorder); } return 0; }