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

};

point findMeetingPoint(line A, line B) {
    // TODO: 在这里输入你的代码,求直线 line_A 与 line_B 的交点
    // a1x + b1y = -c1
    // a2x + b2y = -c2
    if (A.a * B.b - A.b * B.a == 0) return {-1, -1};
    double D = (A.a * B.b - A.b * B.a);
    double D1 = (-A.c * B.b + B.c * A.b);
    double D2 = (B.a * A.c - A.a * B.c);
    return {D1 / D, D2 / 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;
}