class Line
	include Math

	def self.through_two_points(x1, y1, x2, y2)
		a = y1 - y2
		b = x2 - x1
		c = a * x1 + b * y1
		new(a, b, c, x1, y1, x2, y2)
	end

	def cross?(l)
		(@a * l.x1 + @b * l.y1 - @c) * (@a * l.x2 + @b * l.y2 - @c) <= 0 &&
		(l.a * @x1 + l.b * @y1 - l.c) * (l.a * @x2 + l.b * @y2 - l.c) <= 0
	end

	def dist(x, y)
		a = hypot(@x1 - x, @y1 - y)
		b = hypot(@x2 - x, @y2 - y)
		c = hypot(@x1 - @x2, @y1 - @y2)
		return a if a*a + c*c < b*b
		return b if b*b + c*c < a*a
		(@a * x + @b * y - @c).abs / sqrt(@a ** 2 + @b ** 2)
	end

	private_class_method :new

	def initialize(*args)
		@a, @b, @c, @x1, @y1, @x2, @y2 = args	
		if @a < 0
			@a *= -1
			@b *= -1
			@c *= -1
		elsif @a == 0 && @b < 0
			@b *= -1
			@c *= -1
		end
	end

	attr_reader :a, :b, :c, :x1, :y1, :x2, :y2
end

loop do
	n = gets.to_i
	break if n == 0
	xs, ys, xe, ye = gets.split.map(&:to_i)
	course = Line.through_two_points(xs, ys, xe, ye)
	blocks = (1..n).map {gets.split.map(&:to_i)}
	rs = blocks.map do |x1, y1, x2, y2, h|
		next 0 if x1 <= xs && xs <= x2 && y1 <= ys && ys <= y2
		next 0 if x2 <= xs && xs <= x2 && y2 <= ys && ys <= y2

		l = Line.through_two_points(x1, y1, x1, y2)
		next 0 if l.cross?(course)
		r = Line.through_two_points(x2, y1, x2, y2)
		next 0 if r.cross?(course)
		d = Line.through_two_points(x1, y1, x2, y1)
		next 0 if d.cross?(course)
		u = Line.through_two_points(x1, y2, x2, y2)
		next 0 if u.cross?(course)

		ds = [
			course.dist(x1, y1),
			course.dist(x1, y2),
			course.dist(x2, y1),
			course.dist(x2, y2),
			l.dist(course.x1, course.y1),
			r.dist(course.x1, course.y1),
			d.dist(course.x1, course.y1),
			u.dist(course.x1, course.y1),
			l.dist(course.x2, course.y2),
			r.dist(course.x2, course.y2),
			d.dist(course.x2, course.y2),
			u.dist(course.x2, course.y2),
		]

		rs = ds.map do |d|
			if d < h
				d
			else
				(d * d / h + h) / 2
			end
		end
		rs.min
	end
	p rs.min
end