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