#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const int arr = 2e5 + 10;
const int ar = 2e3 + 10;
const long double pi = acos(-1);
const long double eps = 1e-10;
const long long md = 1e9 + 7;
struct Point {
  long double x, y;
  Point() {}
  Point(long double x_, long double y_) {
    x = x_;
    y = y_;
  }
};
ostream& operator<<(ostream& os, Point P) {
  return os << "{" << P.x << "," << P.y << "}";
}
struct Line {
  long double a, b, c;
  Line() {}
  Line(long double a_, long double b_, long double c_) {
    a = a_;
    b = b_;
    c = c_;
  }
  Line(long double x1, long double y1, long double x2, long double y2) {
    a = y2 - y1;
    b = x1 - x2;
    c = -a * x1 - b * y1;
  }
  Line(Point lhs, Point rhs) {
    long double x1 = lhs.x;
    long double y1 = lhs.y;
    long double x2 = rhs.x;
    long double y2 = rhs.y;
    a = y2 - y1;
    b = x1 - x2;
    c = -a * x1 - b * y1;
  }
};
ostream& operator<<(ostream& os, Line L) {
  return os << "{" << L.a << "," << L.b << "," << L.c << "}";
}
Point gavno(-1e16, -1e16);
bool in(long double a, long double b, long double c) {
  return a - 1e-7 <= b && b <= c + 1e-7;
}
vector<Point> vec;
bool eq(Line lhs, Line rhs) {
  if (fabs(lhs.a) <= 1e-7) {
    long double B = lhs.b;
    lhs.a /= B;
    lhs.b /= B;
    lhs.c /= B;
  } else {
    long double A = lhs.a;
    lhs.a /= A;
    lhs.b /= A;
    lhs.c /= A;
  }
  if (fabs(rhs.a) <= 1e-7) {
    long double B = rhs.b;
    rhs.a /= B;
    rhs.b /= B;
    rhs.c /= B;
  } else {
    long double A = rhs.a;
    rhs.a /= A;
    rhs.b /= A;
    rhs.c /= A;
  }
  return fabs(lhs.a - rhs.a) <= 1e-7 && fabs(lhs.b - rhs.b) <= 1e-7 &&
         fabs(lhs.c - rhs.c) <= 1e-7;
}
void intersect(Line lhs, Line rhs, long double x1, long double y1,
               long double x2, long double y2) {
  if (eq(lhs, rhs)) {
    vec.push_back(Point(x1, y1));
    vec.push_back(Point(x2, y2));
    return;
  }
  long double up = rhs.c * lhs.a - lhs.c * rhs.a;
  long double down = lhs.b * rhs.a - rhs.b * lhs.a;
  if (fabs(down) <= 1e-7) {
    return;
  }
  if (fabs(rhs.a) <= 1e-7) {
    if (fabs(lhs.a) <= 1e-7) {
      return;
    }
    Point res = *new Point();
    res.y = -rhs.c / rhs.b;
    res.x = (-lhs.c - lhs.b * res.y) / lhs.a;
    if (in(x1, res.x, x2) && in(y1, res.y, y2)) {
      return void(vec.push_back(res));
    } else {
      return;
    }
  }
  Point res = *new Point();
  res.y = up / down;
  res.x = (-rhs.c - rhs.b * res.y) / rhs.a;
  if (in(x1, res.x, x2) && in(y1, res.y, y2)) {
    return void(vec.push_back(res));
  } else {
    return;
  }
}
void minimize(long double& a, long double b) {
  if (a > b) a = b;
}
void maximize(long double& a, long double b) {
  if (a < b) a = b;
}
int main() {
  "" != "" ? freopen(
                 ""
                 ".in",
                 "r", stdin),
      freopen(
          ""
          ".out",
          "w", stdout)
           : 0;
  "" != "" ? freopen(
                 ""
                 ".dat",
                 "r", stdin),
      freopen(
          ""
          ".sol",
          "w", stdout)
           : 0;
  int n;
  long double x1, y1, x2, y2;
  cin >> n >> x1 >> y1 >> x2 >> y2;
  if (fabs(x1 - x2) <= 1e-7) {
    return cout << -1 << "\n", 0;
  }
  if (fabs(y1 - y2) <= 1e-7) {
    return cout << -1 << "\n", 0;
  }
  x1 += 2e-7;
  x2 -= 2e-7;
  y1 += 2e-7;
  y2 -= 2e-7;
  long double L = 0;
  long double R = 1e15;
  Line L1 = *new Line(x1, y1, x1, y2);
  Line L2 = *new Line(x1, y2, x2, y2);
  Line L3 = *new Line(x2, y1, x2, y2);
  Line L4 = *new Line(x1, y1, x2, y1);
  while (n--) {
    long double rx, ry;
    long double vx, vy;
    int d1, d2, d3, d4;
    scanf("%d%d%d%d", &d1, &d2, &d3, &d4);
    rx = d1;
    ry = d2;
    vx = d3;
    vy = d4;
    if (fabs(vx) <= 1e-7 && fabs(vy) <= 1e-7) {
      if (!in(x1, rx, x2) || !in(y1, ry, y2)) {
        return cout << -1 << "\n", 0;
      }
    }
    vec.clear();
    if (!(fabs(vx) <= 1e-7 && fabs(vy) <= 1e-7)) {
      intersect(Line(rx, ry, rx + vx, ry + vy), L1, x1, y1, x1, y2);
      intersect(Line(rx, ry, rx + vx, ry + vy), L2, x1, y2, x2, y2);
      intersect(Line(rx, ry, rx + vx, ry + vy), L3, x2, y1, x2, y2);
      intersect(Line(rx, ry, rx + vx, ry + vy), L4, x1, y1, x2, y1);
    }
    vector<long double> T(0);
    bool ok = 0;
    if (in(x1, rx, x2) && in(y1, ry, y2)) {
      T.push_back(0);
      ok = 1;
    }
    if (vec.empty() && T.empty()) {
      return cout << -1 << "\n", 0;
    }
    for (auto i : vec) {
      if (fabs(vx) <= 1e-7) {
        T.push_back((i.y - ry) / vy);
      } else {
        T.push_back((i.x - rx) / vx);
      }
    }
    maximize(L, *min_element(T.begin(), T.end()));
    if (ok && (int)(T.size()) == 1) {
    } else
      minimize(R, *max_element(T.begin(), T.end()));
  }
  if (L > R) {
    return cout << -1 << "\n", 0;
  }
  cout << fixed << setprecision(10) << L << "\n";
}
