#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<string>
#include<queue>
#include<complex>
#include<numeric>
#include<bitset>
#define INF 1001001001
#define OUT 1234567
#define EPS 1e-8
#define x first
#define y second

using namespace std;
typedef vector<int> vint;
typedef vector<vint>  vvint;
typedef pair<int,int> pint;
typedef long long Int;
typedef pair<double,double> pt;
typedef pair<pair<double,pt>,pair<double,pt> > ans;

double pi=3.14159265358979;
double len(pt a){
	return hypot(a.x,a.y);
}
int cross(pt a,pt b){
	return (a.x*b.y-a.y*b.x);
}
int naiseki(pt a,pt b,pt c){
	b.x-=a.x;
	b.y-=a.y;
	c.x-=a.x;
	c.y-=a.y;
	return (b.x*c.x+b.y*c.y);
}
int ccw(pt a,pt b,pt c){
	b.x-=a.x;
	b.y-=a.y;
	c.x-=a.x;
	c.y-=a.y;
	if(cross(b,c)>0) return 1;
	if(cross(b,c)<0) return -1;
	return 0;
}
int ccw2(pt a,pt b,pt c){
	b.x-=a.x;
	b.y-=a.y;
	c.x-=a.x;
	c.y-=a.y;
	if((b.x*c.y-b.y*c.x)>0) return 1;
	if((b.x*c.y-b.y*c.x)<0) return -1;
	if((b.x*c.x+b.y*c.y)<0) return 2;
	if(len(b)<len(c)) return -2;
	return 0;
}
int kousa(pt s,pt e,pt p,pt q){
	if(ccw(s,e,p)==0 && ccw(p,q,s)==0) return 0;
	return (ccw(s,e,p)*ccw(s,e,q)<=0 && ccw(p,q,s)*ccw(p,q,e)<=0);
}
bool line(pt a,pt b,pt c){
	if(ccw2(a,b,c)==-2 || ccw2(c,b,a)==-2) return 1;
	return 0;
}
double kyori_(pt s,pt e,pt p){
	e.x-=s.x;
	e.y-=s.y;
	p.x-=s.x;
	p.y-=s.y;
	if(len(e)<=0) return 0;
	return abs((double)cross(e,p))/len(e);
}
double kyori(pt s,pt e,pt p,pt q){
	double ans=INF;
	if(naiseki(s,e,p)>0 && naiseki(e,s,p)>0) ans=min(ans,kyori_(s,e,p));
	if(naiseki(s,e,q)>0 && naiseki(e,s,q)>0) ans=min(ans,kyori_(s,e,q));
	if(naiseki(p,q,s)>0 && naiseki(q,p,s)>0) ans=min(ans,kyori_(p,q,s));
	if(naiseki(p,q,e)>0 && naiseki(q,p,e)>0) ans=min(ans,kyori_(p,q,e));
	ans=min(ans,hypot(p.x-s.x,p.y-s.y));
	ans=min(ans,hypot(p.x-e.x,p.y-e.y));
	ans=min(ans,hypot(q.x-s.x,q.y-s.y));
	ans=min(ans,hypot(q.x-e.x,q.y-e.y));
	return ans;
}
		
int main(){
	int n;
	while(cin >> n){
		if(n==0) break;
		
		double ans = 1234.5;
		pt s,e,p,q,r,t;
		scanf("%lf %lf %lf %lf",&s.x,&s.y,&e.x,&e.y);
		int h;
		
		int i,j;
		for(i=0;i<n;i++){
			scanf("%lf %lf %lf %lf %d",&p.x,&p.y,&r.x,&r.y,&h);
			q=pt(p.x,r.y);
			t=pt(r.x,p.y);
			
			if(p.x<=s.x && s.x<=r.x && p.y<=s.y && s.y<=r.y) ans=0;
			if(p.x<=e.x && e.x<=r.x && p.y<=e.y && e.y<=r.y) ans=0;
			
			if(kousa(s,e,p,q)) ans=0;
			if(kousa(s,e,q,r)) ans=0;
			if(kousa(s,e,r,t)) ans=0;
			if(kousa(s,e,t,p)) ans=0;
			
			double minl=INF;
			minl=min(minl,kyori(s,e,p,q));
			minl=min(minl,kyori(s,e,q,r));
			minl=min(minl,kyori(s,e,r,t));
			minl=min(minl,kyori(s,e,t,p));
			
			if(minl<(double)h) ans=min(ans,minl);
			else ans=min(ans,(minl*minl+(double)h*h)/(2.0*(double)h));
//			cout << ans << endl;
		}
		
		printf("%.5lf\n",ans);
	}
	
	return 0;
}

				
				
				
				
		