rt
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+15;
int n,idx,root,tot;
int x=0,y=0,z=0,qq=0;
string s[N];
struct Node
{
int l,r,v,rd,size;
string s;
}tr[N];
int get_node(string val,int rk)
{
tr[++idx].v=rk;
tr[idx].size=1;
tr[idx].rd=rand();
tr[idx].s=val;
return idx;
}
void push_up(int u)
{
tr[u].size=tr[tr[u].l].size+tr[tr[u].r].size+1;
}
void split(int now,int k,int &x,int &y)
{
if(!now)
{
x=y=0;
return;
}
if(tr[tr[now].l].size>=k)
{
y=now;
split(tr[now].l,k,x,tr[now].l);
}
else
{
x=now;
split(tr[now].r,k-tr[tr[now].l].size-1,tr[now].r,y);
}
push_up(now);
}
int merge(int u,int v)
{
if(!u||!v) return u|v;
if(tr[u].rd<tr[v].rd)
{
tr[u].r=merge(tr[u].r,v);
push_up(u);
return u;
}
else
{
tr[v].l=merge(u,tr[v].l);
push_up(v);
return v;
}
}
void add(int v,string ss)
{
split(root,v,x,y);
root=merge(merge(x,get_node(ss,v)),y);
}
int ask(int k)
{
split(root,k,x,y);
split(y,1,z,qq);
cout<<tr[z].s<<'\n';
root=merge(x,merge(z,qq));
}
signed main()
{
srand(time(0));
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s[i];
add(i-1,s[i]);
}
int m;
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>s[n+i];
int x;
cin>>x;
add(x,s[n+i]);
}
cin>>m;
for(int i=1;i<=m;i++)
{
int x;
cin>>x;
ask(x);
}
return 0;
}