/*
TASK: mov
LANG: C++
*/
#include <iostream>
using namespace std;

struct point
{
       long long x, y;
       point (int a, int b)
       {
             x = a;
             y = b;
       }
       point (){}
       point operator-(point p)
       {
             return point(x - p.x, y - p.y);
       }
};

long long cross(point p1, point p2)
{
     return p1.x*p2.y - p1.y*p2.x;
}

int main()
{
    int n;
    cin >> n;
    for (int k = 0; k < n; k++)
    {
    
        point A, B, C, D;
        point V;
    
        cin >> A.x >> A.y >> B.x >> B.y >> C.x >> C.y >> D.x >> D.y >> V.x >> V.y;
    
        long long CrossCA = cross(V, C - A);
        long long CrossCB = cross(V, C - B);
        long long CrossDA = cross(V, D - A);
        long long CrossDB = cross(V, D - B);
 
        long long CrossC = cross(V, A - B)*cross(C - B, A - B);
        long long CrossD = cross(V, A - B)*cross(D - B, A - B);
        
        bool intersect = 0;
        if (CrossC >= 0 && 
                 CrossCA*CrossCB <= 0) 
              intersect = 1;
        
        if (CrossD >= 0 &&
                 CrossDA*CrossDB <= 0)
              intersect = 1;

        cout << intersect;
    }
    cout << endl;
    return 0;
}
