#include <bits/stdc++.h>
#define x real()
#define y imag()
#define INF (1e9)
#define EPS (1e-5)
using namespace std;
typedef complex<double> point;
point s,g;
double dot(point a,point b){return a.x*b.x+a.y*b.y;}
double cross(point a,point b){return a.x*b.y-a.y*b.x;}

int ccw(point a,point b,point c){
  point d = b-a;
  point e = c-a;
  if(cross(d,e)>0) return 1;//"COUNTER_CLOCKWISE"
  if(cross(d,e)<0) return -1;//"CLOCKWISE"
  if(dot(d,e)<0) return 2;//"ONLINE_BACK"
  if(abs(d)<abs(e)) return -2;//"ONLINE_FRONT"
  return 0;//"ON_SEGMENT"
}

bool intersection(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);
}

//???????§???¢????????´??????????????????
int get_state(vector <point> a,point b){
  int n=a.size();
  for(int i=0;i<n;i++){
    int res=ccw(a[i],a[(i+1)%n],b);
    if(!res)return 0; //?¢???????
    if(res!=1) return 1;//?????´
  }
  return -1;//?????´
}


//???????§???¢??¨???????????¢????±??????????
double get_dis_sp(point a, point b, point c) {
  if (dot(b-a,c-a)<EPS) return abs(c-a);
  if (dot(a-b,c-b) <EPS) return abs(c-b);
  return abs(cross(b-a, c-a)) / abs(b-a);
}


//????????¨??????????????¢
double get_dis_sg_sg(point a,point b,point c,point d){
  if(intersection(a,b,c,d)) return 0;
  return min(min(get_dis_sp(a,b,c),get_dis_sp(a,b,d)),
	     min(get_dis_sp(c,d,a),get_dis_sp(c,d,b)));
}

//???????§???¢??¨??????????????¢
double get_dis_totsu_sg(vector <point> a,point b,point c){
  if(get_state(a,b) !=1||get_state(a,c)!=1)return 0;
  int n=a.size();
  double res=get_dis_sg_sg(a[0],a[1],b,c);
  for(int i=0;i<n;i++) res=min(res,get_dis_sg_sg(a[i],a[(i+1)%n],b,c));
  return res;
}


int main(){
  while(1){
    int n;
    cin>>n;
    if(!n)break;
    double a,b,c,d,h;
    cin>>a>>b>>c>>d;
    s=point(a,b),g=point(c,d);

    double ans=INF;
    vector <point> v;
    v.resize(4);
    for(int i=0;i<n;i++) {
      cin>>a>>b>>c>>d>>h;
      v[3]=point(a,b);
      v[2]=point(a,d);
      v[1]=point(c,d);
      v[0]=point(c,b);
      double dis=get_dis_totsu_sg(v,s,g);
      if(dis>h) ans=min(ans,(dis*dis+h*h)/(2*h));
      else ans=min(ans,dis);
    }
    printf("%.10f\n",ans);
  }
  return 0;
}