#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e8;
const double EPS = 1e-12;
const long long MOD = (long long)(1000000007);
const long long MAXV = (long long)(1e3 + 10);
const long long MAXE = (long long)(4e5 + 10);
struct part {
  double x, v;
};
bool cmp(part a, part b) { return a.x < b.x; }
int n;
vector<part> aux;
vector<part> hld;
int cnt;
bool f(double t) {
  double most_right = -(1e9 + 10);
  for (vector<part>::iterator it = hld.begin(); it != hld.end(); it++) {
    cnt++;
    if (it->v > 0)
      most_right =
          most_right > it->x + it->v * t ? most_right : it->x + it->v * t;
    else if (it->x + it->v * t < most_right)
      return true;
  }
  return false;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  scanf("%d", &n);
  double x, v;
  for (int i = 0; i < n; i++) {
    scanf("%lf%lf", &x, &v);
    aux.push_back((part){x, v});
  }
  sort(aux.begin(), aux.end(), cmp);
  int be = n, en = -1;
  for (int i = 0; i < n; i++) {
    if (aux[i].v > 0) {
      be = i;
      break;
    }
  }
  for (int i = n - 1; i >= 0; i--) {
    if (aux[i].v < 0) {
      en = i;
      break;
    }
  }
  for (int i = be; i <= en; i++) hld.push_back(aux[i]);
  if (!hld.size()) {
    printf("-1\n");
    return 0;
  }
  double lo = 0.0, hi = 1e9 + 10, mid;
  for (int it = 0; it < 100; it++) {
    mid = (lo + hi) / 2.0;
    if (f(mid))
      hi = mid;
    else
      lo = mid;
  }
  printf("%.16lf\n", mid);
  return 0;
}
