#include<bits/stdc++.h>
#define db double
using namespace std;
int T,a,b,c,d;
db ans;
const db eps=1e-7;
struct node{
db x,y;
node(){}
node(db _x,db _y){x=_x,y=_y;}
bool operator<(const node &t)const{return y<t.y||(y==t.y&&x<t.x);}
node operator-(node &t){return node(x-t.x,y-t.y);}
bool operator==(const node &t)const{return x==t.x&&y==t.y;}
};
db CPr(node A,node B){return A.x*B.y-A.y*B.x;}
db CPr(node A,node B,node C){return CPr(B-A,C-A);}
struct edge{
node start,end;
db angle;
edge(){}
edge(node A,node B){
start=A,end=B;
angle=atan2((B-A).y,(B-A).x);
}
bool operator<(const edge &t)const{
if(fabs(angle-t.angle)<=eps)return CPr(start,t.start,t.end)>0;
return angle<t.angle;
}
}A,B;
db S1,S2;
node getnode(edge A,edge B){
S1=CPr(A.start,B.end,A.end);
S2=CPr(A.start,B.start,A.end);
return node((S1*B.start.x-S2*B.end.x)/(S1-S2),(S1*B.start.y-S2*B.end.y)/(S1-S2));
}
signed main()
{
puts("INTERSECTING LINES OUTPUT");
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&a,&b,&c,&d);
A=edge(node(a,b),node(c,d));
scanf("%d%d%d%d",&a,&b,&c,&d);
B=edge(node(a,b),node(c,d));
if(CPr(A.start-A.end,B.start-B.end)==0){
if(CPr(A.start,B.end,B.start)==0)puts("LINE");
else puts("NONE");
}
else printf("POINT %.2lf %.2lf\n",getnode(A,B).x,getnode(A,B).y);
}
printf("END OF OUTPUT");
return 0;
}