#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <list>
#include <iostream>
#include <sstream>
#include <climits>
#include <cfloat>
#include <complex>


typedef long long ll;
const double Eps = 1e-6;


using namespace std;

typedef complex<double> Point;

double dot(const Point& a, const Point& b)
{
	return a.real()*b.real() + a.imag()*b.imag();
}
double cross(const Point& a, const Point& b)
{
	return a.real()*b.imag() - a.imag()*b.real();
}
double distance_line_point(const Point& a, const Point& b, const Point& point)
{
	return abs(cross(a-b, point-b) / abs(a-b));
}
double distance_linesegment_point(const Point& a, const Point& b, const Point& point)
{
	if (dot(b-a, point-a) < Eps)
		return abs(a-point);
	else if (dot(a-b, point-b) <Eps)
		return abs(b-point);
	else
		return distance_line_point(a, b, point);
}
bool is_in_triangle(const Point* triangle, const Point& point)
{
	double t[3];
	for (int i = 0; i < 3; ++i)
		t[i] = cross(triangle[(i+1)%3] - triangle[i], point - triangle[i]);

	return t[0] >= 0 && t[1] >= 0 && t[2] >= 0
		|| t[0] <= 0 && t[1] <= 0 && t[2] <= 0;
}
bool is_in_triangle(const Point& a, const Point& b, const Point& c, const Point& point)
{
	Point t[3] = { a, b, c };
	return is_in_triangle(t, point);
}

int main()
{
	int n;
	scanf("%d", &n);
	while (n--)
	{
		Point p[5];
		for (int i = 0; i < 5; ++i)
		{
			int a, b;
			scanf("%d %d", &a, &b);
			p[i] = Point(a, b);
		}

		if (is_in_triangle(p, p[3]) != is_in_triangle(p, p[4]))
			puts("OK");
		else
			puts("NG");
	}

	return 0;
}