#include <bits/stdc++.h>
using namespace std;
double lastIn;
double firstOut;
int x1, x2, f1, y2;
int x, y, vx, vy;
void incheck(double value);
void outcheck(double value);
int inRangex();
int inRangey();
void fine();
void handleOut();
int inside();
int onBorder();
void timeout();
void handleBorder();
void handleSpecial();
int main() {
  lastIn = 0;
  firstOut = DBL_MAX;
  int n;
  scanf("%d", &n);
  scanf("%d %d %d %d", &x1, &f1, &x2, &y2);
  if (x1 == x2 || f1 == y2) {
    cout << -1;
    return 0;
  }
  for (int i = 0; i < n; i++) {
    scanf("%d %d %d %d", &x, &y, &vx, &vy);
    if (inside()) {
      timeout();
    } else if (onBorder()) {
      handleBorder();
    } else {
      handleOut();
    }
  }
  if (lastIn > firstOut || fabs(lastIn - firstOut) < pow(10, -11))
    cout << -1;
  else
    printf("%.9f", lastIn);
  return 0;
}
int inside() {
  if (x > x1 && x < x2 && y > f1 && y < y2) return 1;
  return 0;
}
int onBorder() {
  if (x == x1 || x == x2 || y == f1 || y == y2) return 1;
  return 0;
}
void timeout() {
  double t1, t2;
  if (vx == 0)
    t1 = DBL_MAX;
  else if (vx > 0)
    t1 = (x2 - x) / (double)vx;
  else
    t1 = (x - x1) / (double)abs(vx);
  if (vy == 0)
    t2 = DBL_MAX;
  else if (vy > 0)
    t2 = (y2 - y) / (double)vy;
  else
    t2 = (y - f1) / (double)abs(vy);
  double result = min(t1, t2);
  if (result < firstOut) firstOut = result;
}
void handleBorder() {
  if (inRangex()) {
    if (y == f1) {
      if (!(vy > 0)) {
        fine();
      } else {
        if (vx == 0) {
          outcheck((y2 - f1) / (double)vy);
        } else {
          outcheck(min((y2 - f1) / (double)vy,
                       max((x1 - x) / (double)vx, (x2 - x) / (double)vx)));
        }
      }
    } else {
      if (!(vy < 0)) {
        fine();
      } else {
        if (vx == 0) {
          outcheck((f1 - y2) / (double)vy);
        } else {
          outcheck(min((f1 - y2) / (double)vy,
                       max((x1 - x) / (double)vx, (x2 - x) / (double)vx)));
        }
      }
    }
  } else if (inRangey()) {
    if (x == x1) {
      if (!(vx > 0)) {
        fine();
      } else {
        if (vy == 0) {
          outcheck((x2 - x1) / (double)vx);
        } else {
          outcheck(min((x2 - x1) / (double)vx,
                       max((f1 - y) / (double)vy, (y2 - y) / (double)vy)));
        }
      }
    } else {
      if (!(vx < 0)) {
        fine();
      } else {
        if (vy == 0) {
          outcheck((x1 - x2) / (double)vx);
        } else {
          outcheck(min((x1 - x2) / (double)vx,
                       max((f1 - y) / (double)vy, (y2 - y) / (double)vy)));
        }
      }
    }
  } else if (x == x1) {
    if (y == f1) {
      if (vx > 0 && vy > 0)
        outcheck(min((x2 - x) / (double)vx, (y2 - y) / (double)vy));
      else
        fine();
    } else if (y == y2) {
      if (vx > 0 && vy < 0)
        outcheck(min((x2 - x) / (double)vx, (f1 - y) / (double)vy));
      else
        fine();
    } else
      handleSpecial();
  } else if (x == x2) {
    if (y == f1) {
      if (vx < 0 && vy > 0)
        outcheck(min((x1 - x) / (double)vx, (y2 - y) / (double)vy));
      else
        fine();
    } else if (y == y2) {
      if (vx < 0 && vy < 0)
        outcheck(min((x1 - x) / (double)vx, (f1 - y) / (double)vy));
      else
        fine();
    } else
      handleSpecial();
  } else
    handleSpecial();
}
void handleSpecial() {
  if (vx == 0 || vy == 0) {
    fine();
    return;
  }
  double inx, outx, iny, outy;
  double time1, time2;
  time1 = (x1 - x) / (double)vx;
  time2 = (x2 - x) / (double)vx;
  if (time1 < 0) time1 = DBL_MAX;
  if (time2 < 0) time2 = DBL_MAX;
  if (time1 < time2) {
    inx = time1;
    outx = time2;
  } else {
    inx = time2;
    outx = time1;
  }
  time1 = (f1 - y) / (double)vy;
  time2 = (y2 - y) / (double)vy;
  if (time1 < 0) time1 = DBL_MAX;
  if (time2 < 0) time2 = DBL_MAX;
  if (time1 < time2) {
    iny = time1;
    outy = time2;
  } else {
    iny = time2;
    outy = time1;
  }
  double inA = max(inx, iny);
  double outA = min(outx, outy);
  if (outA < inA || fabs(outA - inA) < pow(10, -11)) {
    incheck(DBL_MAX);
    outcheck(0);
  } else {
    incheck(inA);
    outcheck(outA);
  }
}
void fine() {
  incheck(DBL_MAX);
  outcheck(0);
}
void handleOut() {
  int flagx = 1;
  int flagy = 1;
  double inx, outx, iny, outy;
  if (inRangex()) {
    flagx = 0;
    inx = 0;
    if (vx == 0)
      outx = DBL_MAX;
    else if (vx > 0)
      outx = (x2 - x) / (double)vx;
    else
      outx = (x1 - x) / (double)vx;
  } else if (inRangey()) {
    flagy = 0;
    iny = 0;
    if (vy == 0)
      outy = DBL_MAX;
    else if (vy > 0)
      outy = (y2 - y) / (double)vy;
    else
      outy = (f1 - y) / (double)vy;
  }
  if (flagx) {
    if (vx == 0) {
      inx = DBL_MAX;
      outx = 0;
    } else {
      double time1, time2;
      time1 = (x1 - x) / (double)vx;
      time2 = (x2 - x) / (double)vx;
      if (time1 < 0) time1 = DBL_MAX;
      if (time2 < 0) time2 = DBL_MAX;
      if (time1 < time2) {
        inx = time1;
        outx = time2;
      } else {
        inx = time2;
        outx = time1;
      }
    }
  }
  if (flagy) {
    if (vy == 0) {
      iny = DBL_MAX;
      outy = 0;
    } else {
      double time1, time2;
      time1 = (f1 - y) / (double)vy;
      time2 = (y2 - y) / (double)vy;
      if (time1 < 0) time1 = DBL_MAX;
      if (time2 < 0) time2 = DBL_MAX;
      if (time1 < time2) {
        iny = time1;
        outy = time2;
      } else {
        iny = time2;
        outy = time1;
      }
    }
  }
  double inA = max(inx, iny);
  double outA = min(outx, outy);
  if (outA < inA || fabs(outA - inA) < pow(10, -11)) {
    incheck(DBL_MAX);
    outcheck(0);
  } else {
    incheck(inA);
    outcheck(outA);
  }
}
void incheck(double value) {
  if (value > lastIn) lastIn = value;
}
void outcheck(double value) {
  if (value < firstOut) firstOut = value;
}
int inRangex() {
  if (x > x1 && x < x2) return 1;
  return 0;
}
int inRangey() {
  if (y > f1 && y < y2) return 1;
  return 0;
}
