#include<bits/stdc++.h>
using namespace std;
struct point{
double x,y;
point(double A,double B){
x=A,y=B;
}
point() = default;
};
struct line{
point point_A,point_B;
line(point A,point B){
point_A = A,point_B = B;
}
line() = default;
};
double grad(line x){
return (x.point_A.y-x.point_B.y)/(x.point_A.x-x.point_B.x);
}
double yint(line x){
return x.point_A.y-grad(x)*x.point_A.x;
}
point findMeetingPoint(line line_A,line line_B){
point meet;
if(grad(line_A)==grad(line_B)){
meet.x=-1;meet.y=-1;
return meet;
}
// TODO:求直线 line_A 与 line_B 的交点
double k1=grad(line_A),k2=grad(line_B),b1=yint(line_A),b2=yint(line_B);
if(line_A.point_A.x==line_A.point_B.x){
meet.x=line_A.point_A.x;
meet.y=k2*line_A.point_A.x+b2;
return meet;
}
if(line_B.point_A.x==line_B.point_B.x){
meet.x=line_B.point_B.x;
meet.y=k1*line_B.point_A.x+b1;
return meet;
}
double xMeet = (b2-b1)/(k1-k2);
double yMeet = k1*xMeet+b1;
meet.x=xMeet;meet.y=yMeet;
return meet;
}
int main(){
point A,B,C,D;
cin>>A.x>>A.y>>B.x>>B.y>>C.x>>C.y>>D.x>>D.y;
line AB=line(A,B);
line CD=line(C,D);
point ans = findMeetingPoint(AB,CD);
cout<<fixed<<setprecision(10)<<ans.x<<" "<<ans.y;
return 0;
}