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