#include<bits/stdc++.h>
using namespace std;
class node{
public:
int data;
node *left;
node *right;
node (int data){
this->data=data;
left=right=NULL;
}
};
int search(int pre,int in[],int l,int r){
for(int i=l;i<=r;i++){
if(in[i]==pre)
return i;
}
}
node *buildtree(int pre[],int in[],int l,int r){
if(l>r)
return NULL;
static int i=0;
node *root=new node(pre[i++]);
int idx=search(root->data,in,l,r);
root->left=buildtree(pre,in,l,idx-1);
root->right=buildtree(pre,in,idx+1,r);
return root;
}
void printkdown(node *root,int k){
if(root==NULL || k<0)
return;
if(k==0){
cout<<root->data<<" ";
// return;
}
else if(k>1)
printkdown(root->left,k-1);
printkdown(root->right,k-1);
}
int printkeynode(node *root,int keynode,int k){
if(root==NULL)
return -1;
if(root->data==keynode){
printkdown(root,k);
return 0;
}
int d1=printkeynode(root->left,keynode,k);
if(d1!=-1){
if(d1+1==k){
cout<<root->data;
}
else
printkdown(root->right,k-d1-2);
return d1+1;
}
int d2=printkeynode(root->right,keynode, k);
if(d2!=-1){
if(d2+1==k){
cout<<root->data<<" ";
}
else
printkdown(root->left,k-d2-2);
return d2+1;
}
return -1;
}
void preorder(node *root){
if(root==NULL)
return;
cout<<root->data;
preorder(root->left);
preorder(root->right);
}
int main(){
int n;
cin>>n;
int pre[n],in[n];
for(int i=0;i<n;i++)
cin>>pre[i];
for(int i=0;i<n;i++)
cin>>in[i];
node *root=buildtree(pre,in,0,n-1);
int p,keynode,dis;
cin>>p;
while(p--){
cin>>keynode>>dis;
printkeynode(root,keynode,dis);
cout<<endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY2xhc3Mgbm9kZXsKCXB1YmxpYzoKCWludCBkYXRhOwoJbm9kZSAqbGVmdDsKCW5vZGUgKnJpZ2h0OwoJCglub2RlIChpbnQgZGF0YSl7CgkJdGhpcy0+ZGF0YT1kYXRhOwoJCWxlZnQ9cmlnaHQ9TlVMTDsKCX0KfTsKaW50IHNlYXJjaChpbnQgcHJlLGludCBpbltdLGludCBsLGludCByKXsKCWZvcihpbnQgaT1sO2k8PXI7aSsrKXsKCQlpZihpbltpXT09cHJlKQoJCXJldHVybiBpOwoJfQp9Cgpub2RlICpidWlsZHRyZWUoaW50IHByZVtdLGludCBpbltdLGludCBsLGludCByKXsKCWlmKGw+cikKCXJldHVybiBOVUxMOwoJCglzdGF0aWMgaW50IGk9MDsKCW5vZGUgKnJvb3Q9bmV3IG5vZGUocHJlW2krK10pOwoJaW50IGlkeD1zZWFyY2gocm9vdC0+ZGF0YSxpbixsLHIpOwoJCglyb290LT5sZWZ0PWJ1aWxkdHJlZShwcmUsaW4sbCxpZHgtMSk7CgkKCXJvb3QtPnJpZ2h0PWJ1aWxkdHJlZShwcmUsaW4saWR4KzEscik7CgkKcmV0dXJuIHJvb3Q7CgkKfQp2b2lkIHByaW50a2Rvd24obm9kZSAqcm9vdCxpbnQgayl7CglpZihyb290PT1OVUxMIHx8IGs8MCkKCXJldHVybjsKCQoJaWYoaz09MCl7CgkJY291dDw8cm9vdC0+ZGF0YTw8IiAiOwovLwkJcmV0dXJuOwoJfQogZWxzZSBpZihrPjEpCglwcmludGtkb3duKHJvb3QtPmxlZnQsay0xKTsKCXByaW50a2Rvd24ocm9vdC0+cmlnaHQsay0xKTsKCQoJCn0KaW50ICBwcmludGtleW5vZGUobm9kZSAqcm9vdCxpbnQga2V5bm9kZSxpbnQgayl7CglpZihyb290PT1OVUxMKQoJcmV0dXJuIC0xOwoJCglpZihyb290LT5kYXRhPT1rZXlub2RlKXsKCQlwcmludGtkb3duKHJvb3Qsayk7CgkJcmV0dXJuIDA7Cgl9CgkKCWludCBkMT1wcmludGtleW5vZGUocm9vdC0+bGVmdCxrZXlub2RlLGspOwoJCglpZihkMSE9LTEpewoJCWlmKGQxKzE9PWspewoJCQljb3V0PDxyb290LT5kYXRhOwoJCX0KICAgICAgZWxzZSAKICAgICAgCiAgICAgIHByaW50a2Rvd24ocm9vdC0+cmlnaHQsay1kMS0yKTsKICAgICAgIAogICAgICAgcmV0dXJuIGQxKzE7Cgl9CgkKCWludCBkMj1wcmludGtleW5vZGUocm9vdC0+cmlnaHQsa2V5bm9kZSwgayk7CgkKCWlmKGQyIT0tMSl7CgkJaWYoZDIrMT09ayl7CgkJCWNvdXQ8PHJvb3QtPmRhdGE8PCIgIjsKCQl9CiAgICAgIGVsc2UgCiAgICAgIAogICAgICBwcmludGtkb3duKHJvb3QtPmxlZnQsay1kMi0yKTsKCQoJcmV0dXJuIGQyKzE7CQoJfQoJCnJldHVybiAtMTsJCn0Kdm9pZCBwcmVvcmRlcihub2RlICpyb290KXsKCWlmKHJvb3Q9PU5VTEwpCglyZXR1cm47CgkKCWNvdXQ8PHJvb3QtPmRhdGE7CglwcmVvcmRlcihyb290LT5sZWZ0KTsKCXByZW9yZGVyKHJvb3QtPnJpZ2h0KTsKfQoKCgoKaW50IG1haW4oKXsKaW50IG47CmNpbj4+bjsKaW50IHByZVtuXSxpbltuXTsKZm9yKGludCBpPTA7aTxuO2krKykKY2luPj5wcmVbaV07Cgpmb3IoaW50IGk9MDtpPG47aSsrKQpjaW4+PmluW2ldOwoKCm5vZGUgKnJvb3Q9YnVpbGR0cmVlKHByZSxpbiwwLG4tMSk7CmludCBwLGtleW5vZGUsZGlzOwpjaW4+PnA7CndoaWxlKHAtLSl7CmNpbj4+a2V5bm9kZT4+ZGlzOwkKcHJpbnRrZXlub2RlKHJvb3Qsa2V5bm9kZSxkaXMpOwpjb3V0PDxlbmRsOwoKfQoJCglyZXR1cm4gMDsKfQ==