#include<bits/stdc++.h>
#include <cmath>
#include <iomanip>
#include <ios>
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 的交点
    point a(-1.0,-1.0);
    double fm1=line_A.point_A.x-line_A.point_B.x;
    double fm2=line_B.point_A.x-line_B.point_B.x;
    if(fm1==0&&fm2==0){
          
       return a;
    }
    else if(fm1==0&&fm2!=0){
       double k2=(line_B.point_A.y-line_B.point_B.y)/fm2;
       double x=line_A.point_A.x;
       double y=k2*(line_A.point_A.x-line_B.point_A.x)+line_B.point_A.y;
       point a(x,y);
       return a;
    }
    else if(fm1!=0&&fm2==0){
        double k1=(line_A.point_A.y-line_A.point_B.y)/fm1;
        double x=line_B.point_A.x;
        double y=k1*(line_B.point_A.x-line_A.point_A.x)-line_A.point_A.y;
        point a(x,y);
        return a;
    }else{
        
         double k1=(line_A.point_A.y-line_A.point_B.y)/fm1;
          double k2=(line_B.point_A.y-line_B.point_B.y)/fm2;
          if(k1==0&&k2==0){
            return a;
          }
          double x=(line_A.point_A.y-line_B.point_A.y+k2*line_B.point_A.x-k1*line_A.point_A.x)/(k2-k1);
double y=(k1*k2*(line_B.point_A.x-line_A.point_A.x)+k2*line_A.point_A.y-k1*line_B.point_A.y)/(k2-k1);
point a(x,y);
return a;
    }
}










































































































































































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