#include<bits/stdc++.h>
#include <cmath>
#include <iomanip>
#include <ios>
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;
};
point findMeetingPoint(line line_A,line line_B){
// TODO:求直线 line_A 与 line_B 的交点
point a(-1.0,-1.0);
double fm1=line_A.point_A.x-line_A.point_B.x;
double fm2=line_B.point_A.x-line_B.point_B.x;
if(fm1==0&&fm2==0){
return a;
}
else if(fm1==0&&fm2!=0){
double k2=(line_B.point_A.y-line_B.point_B.y)/fm2;
double x=line_A.point_A.x;
double y=k2*(line_A.point_A.x-line_B.point_A.x)+line_B.point_A.y;
point a(x,y);
return a;
}
else if(fm1!=0&&fm2==0){
double k1=(line_A.point_A.y-line_A.point_B.y)/fm1;
double x=line_B.point_A.x;
double y=k1*(line_B.point_A.x-line_A.point_A.x)-line_A.point_A.y;
point a(x,y);
return a;
}else{
double k1=(line_A.point_A.y-line_A.point_B.y)/fm1;
double k2=(line_B.point_A.y-line_B.point_B.y)/fm2;
if(k1==0&&k2==0){
return a;
}
double x=(line_A.point_A.y-line_B.point_A.y+k2*line_B.point_A.x-k1*line_A.point_A.x)/(k2-k1);
double y=(k1*k2*(line_B.point_A.x-line_A.point_A.x)+k2*line_A.point_A.y-k1*line_B.point_A.y)/(k2-k1);
point a(x,y);
return a;
}
}
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<<" "<<fixed<<setprecision(10)<<ans.y;
return 0;
}