/*
* UVA_10158_1.cpp
*
* Created on: 2013年11月5日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 10010;
int p[2*maxn];
int n;
int find(int x){
if(p[x] == x){
return x;
}
return (p[x] = find(p[x]));
}
void setFriends(int x,int y){
int x1 = find(x);
int x2 = find(y);
int y1 = find(x+n);
int y2 = find(y+n);
if(x1 == y2 || x2 == y1){
printf("-1\n");
}else{
p[x2] = x1;//将y加入到x的阵营之中
p[y2] = y1;//将y的敌人加入到x的敌人的阵营之中
}
}
void setEnemies(int x,int y){
int x1 = find(x);
int x2 = find(y);
int y1 = find(x+n);
int y2 = find(y+n);
if(x1 == x2){
printf("-1\n");
}else{
p[y1] = x2;//将y将入到x的敌人之中
p[y2] = x1;
}
}
void areFriends(int x,int y){
if(find(x) == find(y)){
printf("1\n");
}else{
printf("0\n");
}
}
void areEnemies(int x,int y){
int x1 = find(x);
int x2 = find(y);
int y1 = find(x + n);
int y2 = find(y + n);
if(x2 == y1 || x1 == y2){
printf("1\n");
}else{
printf("0\n");
}
}
int main(){
scanf("%d",&n);
int i;
for(i = 1 ; i <= 2*n ; ++i){
p[i] = i;
}
int c,x,y;
while(scanf("%d%d%d",&c,&x,&y),c||x||y){
if(c == 1){
setFriends(x,y);
}else if(c == 2){
setEnemies(x,y);
}else if(c == 3){
areFriends(x,y);
}else if(c == 4){
areEnemies(x,y);
}
}
return 0;
}