#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef struct node{
double x,y;
}P;
double cj(P a,P b,P c)
{
double x1,x2,y1,y2;
x1=b.x-a.x,y1=b.y-a.y;
x2=c.x-a.x,y2=c.y-a.y;
return x1*y2-y1*x2;
}
void solve()
{
P a1,a2,b1,b2;
cin>>a1.x>>a1.y>>a2.x>>a2.y>>b1.x>>b1.y>>b2.x>>b2.y;
if(min(a1.x,a2.x)>max(b1.x,b2.x)||min(a1.y,a2.y)>max(b1.y,b2.y)||min(b1.x,b2.x)>max(a1.x,a2.x)||min(b1.y,b2.y)>max(a1.y,a2.y))
{
cout<<"NO"<<endl;
return;
}//快速排斥实验
double a=cj(a1,a2,b1);
double b=cj(a1,a2,b2);
double c=cj(b1,b2,a1);
double d=cj(b1,b2,a2);
if(a*b>0||c*d>0)//跨立实验
{
cout<<"NO"<<endl;
return;
}
if(a*b==0||c*d==0)
{
cout<<"YES"<<endl;
return;
}
double s1=fabs(a);
double s2=fabs(b);
double t=s1/(s2+s1);
double x=t*(b2.x-b1.x)+b1.x;
double y=t*(b2.y-b1.y)+b1.y;
printf("YES (%.3f,%.3f)\n",x,y);
}
int main()
{
int T;
T=1;
cin>>T;
while(T--)
{
solve();
}
}