#include<cstdio>
#include<cmath>
#include<cstdlib>
inline int _int(){
int x=0,c=getchar();
while(c>57||c<48)c=getchar();
while(c>47&&c<58)x=x*10+c-48,c=getchar();
return x;
}
const int N=400010;
int ch[N][2],sz[N],rnd[N],val[N],col[N],ptr=0,stk[N],rt[N],stp=0;
int vc[N];
double lgv[N],lgs[N];
void up(int w){
sz[w]=1+sz[ch[w][0]]+sz[ch[w][1]];
lgs[w]=lgv[w]+lgs[ch[w][0]]+lgs[ch[w][1]];
}
void dn(int w){
if(!vc[w])return;
if(int u=ch[w][0]){
vc[u]=val[u]=vc[w];
lgs[u]=(lgv[u]=lgv[w])*sz[u];
}
if(int u=ch[w][1]){
vc[u]=val[u]=vc[w];
lgs[u]=(lgv[u]=lgv[w])*sz[u];
}
vc[w]=0;
}
void dfs(int w){
if(!w)return;
stk[stp++]=w;
dn(w);
dfs(ch[w][0]);
dfs(ch[w][1]);
}
void rot(int&w,int d){
int u=ch[w][d];
ch[w][d]=ch[u][d^1];
ch[u][d^1]=w;
up(w);
up(w=u);
}
void ins(int&w,int v){
if(w){
++sz[w];lgs[w]+=lgv[v];
dn(w);
int d=(val[w]<val[v]);
int&u=ch[w][d];
ins(u,v);
if(rnd[u]>rnd[w])rot(w,d);
}else w=v;
}
int kmin(int w,int k){
--k;
while(1){
dn(w);
int s=sz[ch[w][0]];
if(s>k)w=ch[w][0];
else if(s<k)k-=s+1,w=ch[w][1];
else return val[w];
}
}
void setmin(int w,int x){
if(!w)return;
dn(w);
if(val[w]<=x){
val[w]=x;
lgv[w]=log(x);
if(int u=ch[w][0]){
vc[u]=val[u]=x;
lgs[u]=(lgv[u]=log(x))*sz[u];
}
setmin(ch[w][1],x);
}else setmin(ch[w][0],x);
up(w);
}
void setmax(int w,int x){
if(!w)return;
dn(w);
if(val[w]>=x){
val[w]=x;
lgv[w]=log(x);
if(int u=ch[w][1]){
vc[u]=val[u]=x;
lgs[u]=(lgv[u]=log(x))*sz[u];
}
setmax(ch[w][0],x);
}else setmax(ch[w][1],x);
up(w);
}
int main(){
srand(1844677);
lgs[0]=0;
for(int q=_int();q;q--)
switch(_int()){
case 1:{
val[++ptr]=_int();
rt[ptr]=col[ptr]=ptr;
sz[ptr]=1;
lgs[ptr]=lgv[ptr]=log(val[ptr]);
rnd[ptr]=rand();
break;
}
case 2:{
int a=col[_int()],b=col[_int()];
if(a!=b){
if(sz[rt[a]]<sz[rt[b]])a^=b,b^=a,a^=b;
stp=0;
dfs(rt[b]);
for(int i=0;i<stp;i++){
int w=stk[i];
lgs[w]=lgv[w];
col[w]=a;
sz[w]=1;ch[w][0]=ch[w][1]=0;
ins(rt[a],w);
}
}
break;
}
case 3:{
int a=col[_int()],x=_int();
setmin(rt[a],x);
break;
}
case 4:{
int a=col[_int()],x=_int();
setmax(rt[a],x);
break;
}
case 5:{
int a=col[_int()];
printf("%d\n",kmin(rt[a],_int()));
break;
}
case 6:{
int a=rt[col[_int()]],b=rt[col[_int()]];
printf("%d\n",lgs[a]>lgs[b]);
break;
}
case 7:{
printf("%d\n",sz[rt[col[_int()]]]);
break;
}
}
return 0;
}