#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define rep(i,n)   FOR(i,0,n)
#define pb emplace_back
typedef long long ll;
typedef pair<int,int> pint;

double PI=acos(-1.0);
#define eps (1e-6)
struct Point{
    double x,y;
    Point(){}
    Point(double x,double y):x(x),y(y){}
    Point operator+(Point p) {return Point(x+p.x,y+p.y);}
    Point operator-(Point p) {return Point(x-p.x,y-p.y);}
    Point operator*(Point p) {return Point(x*p.x-y*p.y,x*p.y+y*p.x);}
    Point operator*(double k){return Point(x*k,y*k);}
    Point operator/(double k){return Point(x/k,y/k);}
    double norm(){return x*x+y*y;}
    double abs(){return sqrt(norm());}
    bool operator == (const Point &p) const{return fabs(x-p.x)<eps && fabs(y-p.y)<eps;}
    double arg(){return atan2(y,x);}
    double dot(Point p){return x*p.x+y*p.y;}
    double det(Point p){return x*p.y-y*p.x;}
};
struct Line{
    Point p1,p2;
    Line(){}
    Line(Point p1, Point p2):p1(p1),p2(p2){}
};
int ccw(Point a,Point b,Point c){
    Point t1=b-a,t2=c-a;
    if(t1.det(t2)> eps) return 1;//counter clockwise
    if(t1.det(t2)< -eps) return -1;//clockwise
    if(t1.dot(t2)< -eps) return 2;//c-a-b online
    if(t1.norm()<t2.norm()) return -2;//a-b-c online
    return 0;//a-c-b online
}
bool intersectSS(Point a,Point b,Point c,Point d){
    return (ccw(a,b,c)*ccw(a,b,d)<=0&&ccw(c,d,a)*ccw(c,d,b)<=0);
}
Point project(Line l,Point p){
    Point base=l.p2-l.p1;
    double r=(p-l.p1).dot(base)/base.norm();
    return l.p1+base*r;
}
double distanceLP1(Line l,Point p){
    Point r=project(l,p);
    if(abs(ccw(l.p1,l.p2,r))==0) return (p-r).abs();
    else return min((p-l.p1).abs(),(p-l.p2).abs());//projection not online
}
double x[2],y[2],h[51];
Line l;
Point po[51];
int n;
bool test(double d){
    rep(i,n){
        double dist=distanceLP1(l,po[i]);
        if(d<=h[i]){
            if(dist<d) return false;
        }
        else{
            if((h[i]*h[i]+dist*dist)/(2.0*h[i])<d) return false;
        }
    }
    return true;
}
int main(){
    double sx,sy,ex,ey;
    while(cin>>n,n){
        cin>>sx>>sy>>ex>>ey;
        Point s=Point(sx,sy),e=Point(ex,ey);
        l=Line(s,e);
        bool flag=false;
        rep(i,n){
            cin>>x[0]>>y[0]>>x[1]>>y[1]>>h[i];
            rep(j,2)rep(k,2)rep(q,2)rep(r,2){
                if(intersectSS(s,e,Point(x[j],y[k]),Point(x[q],y[r]))) flag=true;
            }
            double mn=10001000,cx,cy;
            rep(j,2)rep(k,2){
                double td=distanceLP1(l,Point(x[j],y[k]));
                if(td<mn) mn=td,cx=x[j],cy=y[k];
            }
            rep(j,2)rep(k,2)rep(q,2)rep(r,2){
                Line l2=Line(Point(x[j],y[k]),Point(x[q],y[r]));
                double td=distanceLP1(l2,s);
                if(td<mn){
                    mn=td;
                    Point tp=project(l2,s);
                    cx=tp.x,cy=tp.y;
                }
                td=distanceLP1(l2,e);
                if(td<mn){
                    mn=td;
                    Point tp=project(l2,e);
                    cx=tp.x,cy=tp.y;
                }
            }
            po[i]=Point(cx,cy);
        }
        if(flag){
            cout<<0.0<<endl;
            continue;
        }
        double lb=0,ub=1000;
        while(ub-lb>eps){
            double mid=(ub+lb)/2;
            if(test(mid)) lb=mid;
            else ub=mid;
        }
        cout<<fixed<<setprecision(7)<<lb<<endl;
    }
    return 0;
}


Measured memory_bytes: 3116