#include <bits/stdc++.h>
using namespace std;
complex<long double> mice[100100], speed[100100], p[4], tagh[100100][4];
int X1, X2, Y1, Y2, n;
vector<long double> v[100100];
long double cross(complex<long double> a, complex<long double> b) {
  return imag(conj(a) * b);
}
complex<long double> intersect(complex<long double> L11,
                               complex<long double> L12,
                               complex<long double> L21,
                               complex<long double> L22) {
  long double d1 = cross(L21 - L11, L12 - L11);
  long double d2 = cross(L22 - L11, L12 - L11);
  return (d1 * L22 - d2 * L21) / (d1 - d2);
}
bool check() {
  for (int i = 0; i < n; i++) {
    if (abs(cross(speed[i], p[1] - p[0])) < 1e-14 &&
        abs(p[0].real() - mice[i].real()) < 1e-14)
      return false;
    if (abs(cross(speed[i], p[2] - p[1])) < 1e-14 &&
        abs(p[1].imag() - mice[i].imag()) < 1e-14)
      return false;
    if (abs(cross(speed[i], p[3] - p[2])) < 1e-14 &&
        abs(p[2].real() - mice[i].real()) < 1e-14)
      return false;
    if (abs(cross(speed[i], p[0] - p[3])) < 1e-14 &&
        abs(p[3].imag() - mice[i].imag()) < 1e-14)
      return false;
  }
  return true;
}
bool valid(int i, int j) {
  complex<long double> tmp = tagh[i][j];
  if (j % 2) {
    if (j == 1) {
      if (p[(j + 1) % 4].real() - tmp.real() < -1e-14 ||
          tmp.real() - p[j].real() < -1e-14)
        return false;
    } else {
      if (p[j].real() - tmp.real() < -1e-14 ||
          tmp.real() - p[(j + 1) % 4].real() < -1e-14)
        return false;
    }
  } else {
    if (j == 0) {
      if (p[(j + 1) % 4].imag() - tmp.imag() < -1e-14 ||
          tmp.imag() - p[j].imag() < -1e-14)
        return false;
    } else {
      if (p[j].imag() - tmp.imag() < -1e-14 ||
          tmp.imag() - p[(j + 1) % 4].imag() < -1e-14)
        return false;
    }
  }
  return true;
}
bool inside(long double X, long double Y) {
  if (X >= p[0].real() && p[3].real() >= X && p[2].imag() >= Y &&
      Y >= p[0].imag())
    return true;
  return false;
}
int main() {
  ios_base::sync_with_stdio(0);
  long double ans = 0;
  cin >> n >> X1 >> Y1 >> X2 >> Y2;
  if (X1 > X2) swap(X1, X2);
  if (Y1 > Y2) swap(Y1, Y2);
  p[0] = complex<long double>(X1, Y1);
  p[1] = complex<long double>(X1, Y2);
  p[2] = complex<long double>(X2, Y2);
  p[3] = complex<long double>(X2, Y1);
  for (int i = 0; i < n; i++) {
    cin >> X1 >> Y1 >> X2 >> Y2;
    mice[i] = complex<long double>(X1, Y1);
    speed[i] = complex<long double>(X2, Y2);
  }
  if (!check()) {
    cout << -1 << endl;
    return 0;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < 4; j++)
      if (abs(cross(speed[i], p[(j + 1) % 4] - p[j])) > 1e-14) {
        tagh[i][j] =
            intersect(mice[i], mice[i] + speed[i], p[j], p[(j + 1) % 4]);
        if (valid(i, j))
          v[i].push_back(abs(tagh[i][j] - mice[i]) / abs(speed[i]));
      }
    if (inside(mice[i].real(), mice[i].imag())) v[i].push_back(0.00000);
  }
  for (int i = 0; i < n; i++) {
    sort(v[i].begin(), v[i].end());
    if ((int)v[i].size() < 2 && !inside(mice[i].real(), mice[i].imag())) {
      cout << -1 << endl;
      return 0;
    }
    ans = max(ans, v[i][0]);
  }
  ans += 1e-15;
  for (int i = 0; i < n; i++) {
    if (inside(mice[i].real(), mice[i].imag()) && abs(speed[i]) < 1e-14)
      continue;
    if ((v[i].back() - ans < -1e-17 || ans - v[i][0] < -1e-17)) {
      cout << -1 << endl;
      return 0;
    }
  }
  for (int i = 0; i < n; i++) {
    complex<long double> tmp = mice[i] + (ans * speed[i]);
    if (!inside(tmp.real(), tmp.imag())) {
      cout << -1 << endl;
      return 0;
    }
  }
  cout << setprecision(10) << fixed << ans << endl;
  return 0;
}
