#include<bits/stdc++.h>
using namespace std;
vector<int>v; // save in this vector u need to print in sorted order
class node{
public:
int data ;
node*left;
node*right;
node( int d){
data = d;
left = NULL;
right = NULL;
}
};
node*builttree(int*pre,int*in,int s, int e){
static int i = 0;
if(s>e){
return NULL;
}
int idx = -1;
node*root = new node(pre[i]);
for( int j = s; j<= e; j++){
if(pre[i] == in[j]){
idx = j;
break;
}
}
i++;
root->left = builttree(pre,in,s,idx-1);
root->right = builttree(pre,in,idx+1,e);
return root;
}
node*targetnode(node*root,int A){
if(root==NULL){
return NULL;
}
node*temp;
if(root->data == A){
return root;
}
node* ls = targetnode(root->left,A);
if( ls == NULL){
return targetnode(root->right,A);
}
return ls;
}
void printkthlevel(node*root, int k){
if(root == NULL){
return;
}
if( k==1 ){
v.push_back(root->data);
}
printkthlevel(root->left,k-1);
printkthlevel(root->right,k-1);
return;
}
int printatdistancK(node*root,node*target,int k){
if(root == NULL){
return -1;
}
//reac the target node
if(root == target){
printkthlevel(target,k+1);
return 0;
}
// next step - ancestor
int DL = printatdistancK(root->left,target,k);
if(DL!= -1){
//two cases ancestor or
if(DL+1 == k){
v.push_back(root->data);
}
else{
printkthlevel(root->right,k-DL-1);
}
return 1+DL;
}
int DR = printatdistancK(root->right,target,k);
if(DR!= -1){
//two cases ancestor or
if(DR+1 == k){
v.push_back(root->data);
}
else{
printkthlevel(root->left,k-DR-1);
}
return 1+DR;
}
return -1;
}
int main() {
int n;
cin >>n;
int pre[n];
int in[n];
for( int i = 0; i<n; i++){
cin >> pre[i];
}
for( int i = 0; i<n; i++){
cin >>in[i];
}
int t;
cin >> t;
node*root = builttree(pre,in,0,n-1);
while(t--){
int A,k;
cin >> A>>k;
node*target = targetnode(root,A);
printatdistancK(root,target,k);
if(v.size()==0){
cout<<0;
}
else {
sort(v.begin(),v.end());
for(int x : v){
cout<<x<<" ";
}
}
cout<<endl;
v.clear(); // clear vector after each test
//case as it defined globally so that easily accessible to all function and we dont need to pass all the time
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3RvcjxpbnQ+djsgLy8gc2F2ZSBpbiB0aGlzIHZlY3RvciB1IG5lZWQgdG8gcHJpbnQgaW4gc29ydGVkIG9yZGVyCgpjbGFzcyBub2RlewogICAgcHVibGljOgogICAgaW50IGRhdGEgOwogICAgbm9kZSpsZWZ0OwogICAgbm9kZSpyaWdodDsKCiAgICBub2RlKCBpbnQgZCl7CiAgICAgICAgZGF0YSA9IGQ7CiAgICAgICAgbGVmdCA9IE5VTEw7CiAgICAgICAgcmlnaHQgPSBOVUxMOwogICAgfQp9Owpub2RlKmJ1aWx0dHJlZShpbnQqcHJlLGludCppbixpbnQgcywgaW50IGUpewoJc3RhdGljIGludCBpID0gMDsKCWlmKHM+ZSl7CgkJcmV0dXJuIE5VTEw7Cgl9CglpbnQgaWR4ID0gLTE7Cglub2RlKnJvb3QgPSBuZXcgbm9kZShwcmVbaV0pOwoJZm9yKCBpbnQgaiA9IHM7IGo8PSBlOyBqKyspewoJCWlmKHByZVtpXSA9PSBpbltqXSl7CgkJCWlkeCA9IGo7CgkJCWJyZWFrOwoJCX0KCX0KCWkrKzsKCXJvb3QtPmxlZnQgPSBidWlsdHRyZWUocHJlLGluLHMsaWR4LTEpOwoJcm9vdC0+cmlnaHQgPSBidWlsdHRyZWUocHJlLGluLGlkeCsxLGUpOwoKCXJldHVybiByb290Owp9Cgpub2RlKnRhcmdldG5vZGUobm9kZSpyb290LGludCBBKXsKCWlmKHJvb3Q9PU5VTEwpewoJCXJldHVybiBOVUxMOwoJfQoJbm9kZSp0ZW1wOwoJaWYocm9vdC0+ZGF0YSA9PSBBKXsKCQlyZXR1cm4gcm9vdDsKCX0KCW5vZGUqIGxzID0gdGFyZ2V0bm9kZShyb290LT5sZWZ0LEEpOwoJaWYoIGxzID09IE5VTEwpewoJCXJldHVybiB0YXJnZXRub2RlKHJvb3QtPnJpZ2h0LEEpOwoJfQoJcmV0dXJuIGxzOwp9Cgp2b2lkIHByaW50a3RobGV2ZWwobm9kZSpyb290LCBpbnQgayl7CglpZihyb290ID09IE5VTEwpewoJCXJldHVybjsKCX0KCWlmKCBrPT0xICl7CgkJdi5wdXNoX2JhY2socm9vdC0+ZGF0YSk7Cgl9CglwcmludGt0aGxldmVsKHJvb3QtPmxlZnQsay0xKTsKCXByaW50a3RobGV2ZWwocm9vdC0+cmlnaHQsay0xKTsKCXJldHVybjsKfQppbnQgcHJpbnRhdGRpc3RhbmNLKG5vZGUqcm9vdCxub2RlKnRhcmdldCxpbnQgayl7CiAgICBpZihyb290ID09IE5VTEwpewogICAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIC8vcmVhYyB0aGUgdGFyZ2V0IG5vZGUKICAgIGlmKHJvb3QgPT0gdGFyZ2V0KXsKICAgICAgICBwcmludGt0aGxldmVsKHRhcmdldCxrKzEpOwogICAgICAgIHJldHVybiAwOwogICAgfQogICAgLy8gbmV4dCBzdGVwIC0gYW5jZXN0b3IKICAgIGludCBETCA9IHByaW50YXRkaXN0YW5jSyhyb290LT5sZWZ0LHRhcmdldCxrKTsKICAgIGlmKERMIT0gLTEpewogICAgICAgIC8vdHdvIGNhc2VzIGFuY2VzdG9yIG9yCiAgICAgICAgaWYoREwrMSA9PSBrKXsKICAgICAgICAgICAgdi5wdXNoX2JhY2socm9vdC0+ZGF0YSk7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIHByaW50a3RobGV2ZWwocm9vdC0+cmlnaHQsay1ETC0xKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDErREw7CiAgICB9CiAgICBpbnQgRFIgPSBwcmludGF0ZGlzdGFuY0socm9vdC0+cmlnaHQsdGFyZ2V0LGspOwogICAgaWYoRFIhPSAtMSl7CiAgICAgICAgLy90d28gY2FzZXMgYW5jZXN0b3Igb3IKICAgICAgICBpZihEUisxID09IGspewogICAgICAgICAgICB2LnB1c2hfYmFjayhyb290LT5kYXRhKTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgcHJpbnRrdGhsZXZlbChyb290LT5sZWZ0LGstRFItMSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAxK0RSOwogICAgfQogICAgcmV0dXJuIC0xOwp9CmludCBtYWluKCkgewoJaW50IG47CgljaW4gPj5uOwoJaW50IHByZVtuXTsKCWludCBpbltuXTsKCWZvciggaW50IGkgPSAwOyBpPG47IGkrKyl7CgkJY2luID4+IHByZVtpXTsKCX0KCWZvciggaW50IGkgPSAwOyBpPG47IGkrKyl7CgkJY2luID4+aW5baV07Cgl9CglpbnQgdDsKCWNpbiA+PiB0OwoJbm9kZSpyb290ID0gYnVpbHR0cmVlKHByZSxpbiwwLG4tMSk7Cgl3aGlsZSh0LS0pewoJCWludCBBLGs7CgkJY2luID4+IEE+Pms7CgkJbm9kZSp0YXJnZXQgPSB0YXJnZXRub2RlKHJvb3QsQSk7CgkJcHJpbnRhdGRpc3RhbmNLKHJvb3QsdGFyZ2V0LGspOwoJCWlmKHYuc2l6ZSgpPT0wKXsKCQkJY291dDw8MDsKCQl9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHNvcnQodi5iZWdpbigpLHYuZW5kKCkpOwogICAgICAgICAgICBmb3IoaW50IHggOiB2KXsKICAgICAgICAgICAgICAgIGNvdXQ8PHg8PCIgIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb3V0PDxlbmRsOwogICAgICAgIHYuY2xlYXIoKTsgLy8gY2xlYXIgdmVjdG9yIGFmdGVyIGVhY2ggdGVzdCAKCQkvL2Nhc2UgYXMgaXQgZGVmaW5lZCBnbG9iYWxseSBzbyB0aGF0IGVhc2lseSBhY2Nlc3NpYmxlIHRvIGFsbCBmdW5jdGlvbiBhbmQgd2UgZG9udCBuZWVkIHRvIHBhc3MgYWxsIHRoZSB0aW1lCgl9CglyZXR1cm4gMDsKfQ==