#include<bits/stdc++.h>
#include <ios>
#include <iostream>
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 的交点
    double A1 = line_A.point_B.y - line_A.point_A.y;
    double B1 = line_A.point_A.x - line_A.point_B.x;
    double C1 = line_A.point_B.x * line_A.point_A.y - line_A.point_A.x * line_A.point_B.y;

    double A2 = line_B.point_B.y - line_B.point_A.y;
    double B2 = line_B.point_A.x - line_B.point_B.x;
    double C2 = line_B.point_B.x * line_B.point_A.y - line_B.point_A.x * line_B.point_B.y;

    double denominator = A1 * B2 - A2 * B1;

    if (fabs(denominator) < 1e-10){
        return point(-1, -1);
    }
    else {
        
        double x = (B1 * C2 - B2 * C1) / denominator;
        double y = (A2 * C1 - A1 * C2) / denominator;
        cout << fixed << setprecision(8);
        return point(x, y);
    }
}

































































































































































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