#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 x1 = line_A.point_A.x, y1 = line_A.point_A.y;
    double x2 = line_A.point_B.x, y2 = line_A.point_B.y;
    double x3 = line_B.point_A.x, y3 = line_B.point_A.y;
    double x4 = line_B.point_B.x, y4 = line_B.point_B.y;

    // 计算直线方程的参数
    double A1 = y2 - y1;
    double B1 = x1 - x2;
    double C1 = x2 * y1 - x1 * y2;
    double A2 = y4 - y3;
    double B2 = x3 - x4;
    double C2 = x4 * y3 - x3 * y4;

    // 计算分母
    double D = A1 * B2 - A2 * B1;

    // 判断是否平行或重合
    if (fabs(D) < 1e-8) {
        return point(-1, -1);
    }

    // 计算交点
    double x = (B1 * C2 - B2 * C1) / D;
    double y = (A2 * C1 - A1 * C2) / D;
    
    std::cout << std::fixed << std::setprecision(6);

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