/*
author : w2sc
  date : 2019/12/21
  time : 14:10:52
*/
#include <bits/stdc++.h>
#define ull unsigned long long
#define ll long long
using namespace std;
const int INF=0x3f3f3f3f;
const double EPS=1e-10,PI=acos(-1.);
struct Point{
    double x,y;
    Point(){}
    Point(double xx,double yy){x=xx,y=yy;}
    Point operator -(Point A){return Point(x-A.x,y-A.y);}
    Point operator +(Point A){return Point(x+A.x,y+A.y);}
    Point operator *(double k){return Point(k*x,k*y);}
    double operator *(Point A){return x*A.x+y*A.y;}
    double operator ^(Point A){return x*A.y-y*A.x;}
    double len2(){return x*x+y*y;}
    double len(){return sqrt(len2());}
};
typedef Point Vec;
struct Line{
    Point A,B;
    Vec v,v0;
    Line(){}
    Line(Point AA,Point BB)
    {A=AA,B=BB;v=(B-A),v0=v*(1/(B-A).len());}
    double area(Point C){return (((B-A)^(C-A)));}
    Point crossp(Line tmp)
    {
        double aa=fabs(tmp.area(A)),ab=fabs(tmp.area(B));
        return A+v*(aa/(aa+ab));;
    }
};
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        Point A,B;
        Line a,b;
        scanf("%lf%lf%lf%lf",&A.x,&A.y,&B.x,&B.y);
        a=Line(A,B);
        scanf("%lf%lf%lf%lf",&A.x,&A.y,&B.x,&B.y);
        b=Line(A,B);
        A=a.crossp(b);
        printf("%.10f %.10f\n",A.x,A.y);
    }
    return 0;
}

