#include using namespace std; #define rep(i,a,b) for(int i=a; i pii; vector ojce; vector > wory; const int M=51*1e5+51; const int L=1e5; int bwg[8]={0,1,1,0,-1,0,0,-1}; int krol (int a) { if (ojce[a]==-1) return a; else { ojce[a]=krol(ojce[a]); return ojce[a]; } } bool unia (int a, int b) { int krola=krol(a), krolb=krol(b); if (krola==krolb) return false; ojce[krolb]=krola; return true; } void add () { int x1, x2, y1, y2; int a, b, c, d; scanf ("%d %d %d %d", &x1, &y1, &x2, &y2); int lg=y1*51+x1; set::iterator it; rep(x,x1,x2+1) { it=wory[x].lower_bound(y1); while (it!=wory[x].end() && *it<=y2) { a=x; b=*it; unia(lg, a+51*b); rep(k,0,4) { c=a+bwg[k*2]; d=b+bwg[k*2+1]; if (c>0) if (d>0) if (c<=50) if (d<=L) { if (wory[c].count(d)==0) unia(lg, c+51*d); } } c=*it; it++; wory[x].erase(c); } } } int n, q; int main() { ojce.resize(M, -1); wory.resize(51); rep(i,0,51) rep(j,1,1e5+1) wory[i].insert(j); int l, t; int x1, x2, y1, y2; scanf ("%d", &l); rep(i,0,l) { scanf ("%d", &t); if (t==0) { add(); } else { scanf ("%d %d %d %d", &x1, &y1, &x2, &y2); if (krol(x1+y1*51)==krol(x2+y2*51)) printf ("1\n"); else printf ("0\n"); } } return 0; }