#include #define rep(i,x,y) for (int i = (x); i<=(y); i++) #define repe(i,x,y) for (int i = (x); i < (y);i++) #define drep(i,x,y) for (int i = (x); i >= (y); i--) #define mp make_pair #define pb push_back #define MAX(a,b) (((a)>(b))?(a):(b)) #define MIN(a,b) (((a)<(b))?(a):(b)) #define MAXN 100100 #define sf(n) scanf("%Lf",&n) #define prf(n) printf("%Lf",n) #define s(n) scanf("%d",&n) #define sl(n) scanf("%lld",&n) #define pr(n) printf("%d",n) #define prl(n) printf("%lld",n) #define endc printf("\n") #define psp printf(" ") using namespace std; typedef long long ll; typedef long double ld; typedef pair pii; const int buffer=1<<13; char buff[buffer]; int cnt=0; int gi() { int x; s(x); return x; /*int number = 0; while(buff[cnt] < '0' || '9' < buff[cnt]) if(++cnt >= buffer) fread(buff, buffer, 1, stdin), cnt = 0; while('0' <= buff[cnt] && buff[cnt] <= '9') { number = number * 10 + buff[cnt] - '0'; if(++cnt >= buffer) fread(buff, buffer, 1, stdin), cnt = 0; } return number;*/ } vector current; stack< vector > S; typedef struct node { stack A; int name; node() { } node(int name):name(name) { A = *new stack(); A.push(-1); } int get() { return A.top(); } int undo() { A.pop(); } int set(int v) { A.push(v); S.top().pb(name); } } node; node Z[MAXN]; void unionS(int x,int y) { Z[x].set(y); } int findS(int x) { //cout< >(); int n = gi(), m = gi(); //cout< V = S.top(); S.pop(); repe(j,0,V.size()) { Z[V[j]].undo(); } } } else { int x = gi(), y = gi(); int a = findS(x), b = findS(y); pr(a==b ? 1 : 0); endc; } //cout<<"Ok"<