from ctypes import pointer
class Point:
    def __init__(self, x=0.0, y=0.0):
        self.x = x
        self.y = y


class Line:
    def __init__(self, point_a=None, point_b=None):
        self.point_A = point_a if point_a is not None else Point()
        self.point_B = point_b if point_b is not None else Point()


def find_meeting_point(line_A, line_B):
    # TODO: 在这里输入你的代码,求直线 line_A 与 line_B 的交点
    xa1,ya1=line_A.point_A.x,line_A.point_A.y
    xa2,ya2 = line_A.point_B.x,line_A.point_B.y

    xb1,yb1=line_B.point_A.x,line_B.point_A.y
    xb2,yb2 = line_B.point_B.x,line_B.point_B.y

    if xa1-xa2 == 0:
        Ka =0
    else:
        Ka = (ya1-ya2)/(xa1-xa2)
    if xb1-xb2 ==0:
        Kb=0
    else:
        Kb = (yb1-yb2)/(xb1-xb2)

    Ba = ya1-Ka*xa1
    Bb = yb1-Kb*xb1

    # k相同时为平行线
    if Ka==Kb:
       
        #判断铅直直线交点,防止直线与坐标轴平行时交点漏了
        if xa1-xa2==0 and xb1-xb2!=0:
            xm = xa1
            ym = Kb*xa1 - Bb
            point_m = Point(xm,ym)
            return point_m
        elif xb1-xb2==0 and xa1-xa2!=0:
            xm = xb1
            ym = Ka*xb1 - Ba
            point_m = Point(xm,ym)
            return point_m
            
        return Point(-1, -1)
    else:
        xm = (Bb-Ba)/(Ka-Kb)
        ym = Ka*xm+Ba
        point_m = Point(xm,ym)
        return point_m



def main():
    data = list(map(float, input().split()))
    data.extend(list(map(float, input().split())))
    A = Point(data[0], data[1])
    B = Point(data[2], data[3])
    C = Point(data[4], data[5])
    D = Point(data[6], data[7])
    AB = Line(A, B)
    CD = Line(C, D)
    ans = find_meeting_point(AB, CD)
    print(f"{ans.x} {ans.y}")


if __name__ == "__main__":
    main()