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

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 D=A1*B2-A2*B1;
    if(D==0)return point (-1,-1);
    return point((B1*C2-B2*C1)/D,(A2*C1-A1*C2)/D);
}

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