#include<cstdio>
using namespace std;
int n,m;
struct node{
int v,s=0,b=0,root;
}tree[1000001];
bool k[1000001];
int merge(int x,int y){
if(!x)return y;
if(!y)return x;
if(tree[x].v>tree[y].v){int nd=y;x=y;y=nd;}
tree[y].b=tree[x].s;
tree[x].s=y;
return x;
}
int merges(int x){
if(!x||!tree[x].b)return x;
int b1=tree[x].b,b2=tree[b1].b;
tree[x].b=tree[b1].b=0;
return merge(merge(x,b1),merges(b2));
}
int pop(int x){
return merges(tree[x].s);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&(tree+i)->v),tree[i].root=i;
scanf("%d\n",&m);
while(m--){
char op;
scanf("%c ",&op);
if(op=='M'){
int i,j;
scanf("%d %d\n",&i,&j);
if(!k[i]&&!k[j])tree[i].root=tree[j].root=merge(tree[i].root,tree[j].root);
}
if(op=='K'){
int i;
scanf("%d\n",&i);
if(k[i]){printf("0\n");continue;}
int root=tree[i].root;
k[root]=true;
tree[i].root=pop(root);
printf("%d\n",tree[root].v);
}
}
return 0;
}