#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;
    double a, b, c;
    line(point A,point B){
        point_A = A,point_B = B;
        a = point_A.y - point_B.y;
        b = point_B.x - point_A.x;
        c = point_A.x * point_B.y - point_B.x * point_A.y;
    }
    line() = default;
};

point findMeetingPoint(line line_A,line line_B){
    point z;
    double w = line_A.a * line_B.b - line_A.b * line_B.a;
    if (w)
    {
        z.x = (line_A.b * line_B.c - line_B.b * line_A.c) / w;
        z.y = (line_B.a * line_A.c - line_A.a * line_B.c) / w;
    }// TODO:求直线 line_A 与 line_B 的交点
    else {
        z.x = -1;
        z.y = -1;
    }
    cout << fixed << setprecision(6);
    return z;
}


































































































































































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 << ans.x<<" "<<ans.y;
    return 0;
}