from fractions import Fraction
INF = 1 << 60

class Point:
    def __init__(self,x,y):
        self.x = x
        self.y = y
    
    def __repr__(self):
        return f"Point({self.x}, {self.y})"

class Segment:
    def __init__(self, p, l, r):
        self.p = p
        self.l = l
        self.r = r

    def __repr__(self):
        return f"Segment({self.p}, {self.l}, {self.r})"

def ccw(a,b,c):
    return (b.x-a.x)*(c.y-a.y) - (b.y-a.y)*(c.x-a.x)

def intersect(s1,s2):
    a,b = s1
    c,d = s2
    return ccw(a,b,c)*ccw(a,b,d) < 0 and ccw(c,d,a)*ccw(c,d,b) < 0

def x_intercept(a,b):
    if a.y == b.y:
        return Fraction(-INF,1)
    return a.x - (a.x-b.x)/(a.y-b.y)*a.y

def dist(a,b):
    return ((a.x-b.x)**2 + (a.y-b.y)**2)**0.5

n = int(input())

segs = []
for __ in range(n):
    x,y,l,r = map(int,input().split())
    segs.append(Segment(Point(Fraction(x,1),Fraction(y,1)),Fraction(l,1),Fraction(r,1)))


def solve(lst):
    res = []
    stack = [(Point(-INF, INF), -INF)]
    for i in range(n):
        mpoint = lst[i].l
        while lst[i].p.y >= stack[-1][0].y:
            if intersect((lst[i].p, Point(lst[i].r, 0)), (stack[-1][0], Point(stack[-1][1], 0))):
                return None
            mpoint = max(mpoint, x_intercept(lst[i].p, stack[-1][0]))
            stack.pop()

        if intersect((lst[i].p, Point(lst[i].r, 0)), (stack[-1][0], Point(stack[-1][1], 0))):
            return None

        if mpoint > lst[i].r:
            return None
        res.append(mpoint)
        stack.append((lst[i].p, mpoint))
    return res

rleft = solve(segs)
rright = solve([Segment(Point(-s.p.x,s.p.y),-s.r,-s.l) for s in segs[::-1]])
if rleft is None or rright is None:
    print(-1)
    exit()

ans = 0
for i in range(n):
    left, right = rleft[i], -rright[n-i-1]
    if left <= segs[i].p.x <= right:
        ans += segs[i].p.y
    else:
        ans += min(dist(segs[i].p, Point(left, 0)), dist(segs[i].p, Point(right, 0)))

print("%.10f" % ans)
