#include<cstdio>
#include<vector>
#include<algorithm>
#include<utility>
#include<numeric>
#include<iostream>
#include<array>
#include<string>
#include<sstream>
#include<stack>
#include<queue>
#include<list>
#include<functional>
#define _USE_MATH_DEFINES

#include<math.h>
#include<map>

#define INF 200000000

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<ll, int> pli;

struct OwnVector2
{
	double x, y;
	OwnVector2(double x,double y):x(x),y(y){}
	OwnVector2() :OwnVector2(0, 0) {}
	OwnVector2 operator+(const OwnVector2& v)const
	{
		return OwnVector2(x + v.x, y + v.y);
	}
	OwnVector2 operator-(const OwnVector2& v)const
	{
		return OwnVector2(x - v.x, y - v.y);
	}
	OwnVector2 operator*(const double v)const
	{
		return OwnVector2(x*v, y*v);
	}
};

OwnVector2 CalcCrossPoint(OwnVector2 p1, OwnVector2 p2, OwnVector2 p3, OwnVector2 p4)
{
	OwnVector2 p12, p13, p14, p34, p31, p32;
	p12 = p2 - p1; p13 = p3 - p1; p14 = p4 - p1; p34 = p4 - p3; p31 = p1 - p3; p32 = p2 - p3;

	double ksi, delta;

	ksi = (p14.x*p34.y - p14.y*p34.x);
	delta = (p12.x*p34.y - p12.y*p34.x);

	return p1 + p12*(ksi / delta);
}

int main()
{
	cin.tie(0);
	ios::sync_with_stdio(false);

	int q;
	cin >> q;

	for (int i = 0; i < q; i++)
	{
		double x0, x1, x2, x3, y0, y1, y2, y3;
		cin >> x0 >> y0 >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;

		OwnVector2 p0(x0, y0), p1(x1, y1), p2(x2, y2), p3(x3, y3);
		OwnVector2 crossPoint = CalcCrossPoint(p0, p1, p2, p3);

		printf("%.10lf %.10lf\n", crossPoint.x, crossPoint.y);
	}

	return 0;
}
