#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) {
    double a1 = line_A.point_A.y - line_A.point_B.y ; 
    double b1 = line_A.point_B.x - line_A.point_A.x ;
    double c1 = line_A.point_B.y * line_A.point_A.x - line_A.point_A.y * line_A.point_B.x ; 
    double a2 = line_B.point_A.y - line_B.point_B.y ; 
    double b2 = line_B.point_B.x - line_B.point_A.x ;
    double c2 = line_B.point_B.y * line_B.point_A.x - line_B.point_A.y * line_B.point_B.x ; 
    double D = a1 * b2 - a2 * b1;
    double Dx = b1 * c2 - b2 * c1;
    double Dy = a2 * c1 - a1 * c2;
    if (fabs(D) < 1e-8) {
        double val = a2 * line_A.point_A.x + b2 * line_A.point_A.y + c2;
        if (fabs(val) < 1e-8) {
            return point(-1, -1);
        } else {
            return point(-1, -1);
        }
    } else {
        double x = Dx / D;
        double y = Dy / D;
        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 << fixed << setprecision(12) << ans.x << " " << ans.y;
    return 0;
}