#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 的交点
    if(line_A.point_A.x != line_A.point_B.x && line_B.point_A.x != line_B.point_B.x ){
        double k_a = (line_A.point_A.y - line_A.point_B.y) / (line_A.point_A.x - line_A.point_B.x);
        double k_b = (line_B.point_A.y - line_B.point_B.y) / (line_B.point_A.x - line_B.point_B.x);
        if(k_a == k_b){
            struct point point_cross = point(-1, -1);
            return point_cross;
        }
        double b_a = line_A.point_A.y - k_a * line_A.point_A.x;
        double b_b = line_B.point_A.y - k_b * line_B.point_A.x;
        double x = (b_b - b_a) / (k_a - k_b);
        double y = (k_a * b_b - k_b * b_a) / (k_a - k_b);
        struct point point_cross = point(x, y);
        return point_cross;
    }
    else if(line_A.point_A.x == line_A.point_B.x && line_B.point_A.x != line_B.point_B.x){
        double x = line_A.point_A.x;
        double k_b = (line_B.point_A.y - line_B.point_B.y) / (line_B.point_A.x - line_B.point_B.x);
        double b_b = line_B.point_A.y - k_b * line_B.point_A.x;
        double y = k_b * x + b_b;
        struct point point_cross = point(x, y);
        return point_cross;
    }
    else if(line_A.point_A.x != line_A.point_B.x && line_B.point_A.x == line_B.point_B.x){
        double x = line_B.point_A.x;
        double k_a = (line_A.point_A.y - line_A.point_B.y) / (line_A.point_A.x - line_A.point_B.x);
        double b_a = line_A.point_A.y - k_a * line_A.point_A.x;
        double y = k_a * x + b_a;
         struct point point_cross = point(x, y);
        return point_cross;
    }
    else{
        struct point point_cross = point(-1, -1);
        return point_cross;
    }
}


  


























































































































































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<<std::setprecision(15) <<ans.x<<" "<<std::setprecision(15) <<ans.y;
    return 0;
}