#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;
}