#include <bits/stdc++.h>
using namespace std;

struct Point {
    int x, y;

    Point() = default;
    Point(int x, int y) : x(x), y(y) {}

    Point operator+(const Point &rhs) const {
        return Point(x + rhs.x, y + rhs.y);
    }

    Point operator-(const Point &rhs) const {
        return Point(x - rhs.x, y - rhs.y);
    }

    long long operator*(const Point &rhs) const {
        return 1ll * x * rhs.x + 1ll * y * rhs.y;
    }

    long long operator%(const Point &rhs) const {
        return 1ll * x * rhs.y - 1ll * y * rhs.x;
    }
};

bool intersect(Point p1, Point p2, Point p3, Point p4) {
    if (max(p1.x, p2.x) < min(p3.x, p4.x) || max(p3.x, p4.x) < min(p1.x, p2.x)) return false;
    if (max(p1.y, p2.y) < min(p3.y, p4.y) || max(p3.y, p4.y) < min(p1.y, p2.y)) return false;
    return ((p3 - p1) % (p4 - p1)) * ((p3 - p2) % (p4 - p2)) <= 0 &&
           ((p1 - p3) % (p2 - p3)) * ((p1 - p4) % (p2 - p4)) <= 0;
}

int main() {
    int q; cin >> q;
    while (q--) {
        Point p1, p2, p3, p4;
        cin >> p1.x >> p1.y;
        cin >> p2.x >> p2.y;
        cin >> p3.x >> p3.y;
        cin >> p4.x >> p4.y;
        cout << (intersect(p1, p2, p3, p4) ? 1 : 0) << endl;
    }
}

