#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e5 + 10;
double x[maxn], v[maxn];
int n, ltr, rtl;
vector<int> rid, lid;
vector<int> rpos[maxn];
inline bool less2(double a, double b) {
  double dif = fabs(a - b);
  if (dif < 1e-9) return 0;
  return a < b;
}
inline bool less3(int a, int b) { return less2(x[a], x[b]); }
inline bool check(double tim) {
  double premax = x[lid[0]];
  for (int i = 0; i < lid.size(); i++) {
    {
      if (less2(premax, x[lid[i]] + v[lid[i]] * tim))
        premax = x[lid[i]] + v[lid[i]] * tim;
    }
    for (int j = 0; j < rpos[i + 1].size(); j++) {
      double lft = x[rpos[i + 1][j]] + v[rpos[i + 1][j]] * tim;
      double dif = lft - premax;
      if (dif < (0 + 1e-9)) return 1;
    }
  }
  return 0;
}
int main() {
  scanf("%d", &n);
  ltr = rtl = -1;
  for (int i = 0; i < n; i++) {
    scanf("%lf%lf", &x[i], &v[i]);
    if (less2(0, v[i])) {
      if (ltr == -1 || less2(x[i], x[ltr])) ltr = i;
      lid.push_back(i);
    } else {
      if (rtl == -1 || less2(x[rtl], x[i])) rtl = i;
      rid.push_back(i);
    }
  }
  if (ltr == -1 || rtl == -1 || less2(x[rtl], x[ltr])) {
    printf("-1\n");
    return 0;
  }
  sort(lid.begin(), lid.end(), less3);
  for (int i = 0; i < rid.size(); i++) {
    int p = lower_bound(lid.begin(), lid.end(), rid[i], less3) - lid.begin();
    rpos[p].push_back(rid[i]);
  }
  double l = 0, r = (x[rtl] - x[ltr]) / (v[ltr] - v[rtl]);
  while (less2(l, r)) {
    double mid = (l + r) / 2.0;
    if (check(mid))
      r = mid;
    else
      l = mid;
  }
  printf("%.10lf", r);
  return 0;
}
