#include <stdio.h>
#define ll long long

typedef struct Point{ll x,y;}P;
typedef struct line{P p1,p2;}L;
int sgn(ll x){return x<0?-1:x>0;}

int iscross(L s,L t){
	//点(p,q)が直線f(x,y)=ax+by+c=0のどっち側にあるかはf(p,q)を見ればよい
	//点(x1,y1),(x2,y2)を結ぶ直線の式は(y2-y1)*(x-x1)+(x2-x1)*(y1-y)=0
	ll t1=(s.p2.y-s.p1.y)*(t.p1.x-s.p1.x)+(s.p2.x-s.p1.x)*(s.p1.y-t.p1.y);
	ll t2=(s.p2.y-s.p1.y)*(t.p2.x-s.p1.x)+(s.p2.x-s.p1.x)*(s.p1.y-t.p2.y);
	ll t3=(t.p2.y-t.p1.y)*(s.p1.x-t.p1.x)+(t.p2.x-t.p1.x)*(t.p1.y-s.p1.y);
	ll t4=(t.p2.y-t.p1.y)*(s.p2.x-t.p1.x)+(t.p2.x-t.p1.x)*(t.p1.y-s.p2.y);
	//同一直線上にない
	if(t1 || t2)return sgn(t1)!=sgn(t2) && sgn(t3)!=sgn(t4);
	//同一直線上にある
	ll c1=(s.p2.x-s.p1.x)*(s.p2.x-s.p1.x)+(s.p2.y-s.p1.y)*(s.p2.y-s.p1.y);
	ll c2=(t.p1.x-s.p1.x)*(s.p2.x-s.p1.x)+(t.p1.y-s.p1.y)*(s.p2.y-s.p1.y);
	ll c3=(t.p2.x-s.p1.x)*(s.p2.x-s.p1.x)+(t.p2.y-s.p1.y)*(s.p2.y-s.p1.y);
	if(0<=c2&&c2<=c1 || 0<=c3&&c3<=c1 || c2<=0&&c1<=c3 || c3<=0&&c1<=c2)return 1;
	return 0;
}

int main(){
	int q;
	scanf("%d",&q);
	while(q--){
		L s,t;
		for(int i=0;i<2;i++){
			scanf("%lld%lld%lld%lld",&s.p1.x,&s.p1.y,&s.p2.x,&s.p2.y);
			if(!i)t=s;
		}
		printf("%d\n",iscross(s,t));
	}
}
