#include <bits/stdc++.h>
using namespace std;
const long long N = 1e6 + 5;
const long long ha = 1e9 + 7;
const long double eps = 1e-8;
struct UF {
  vector<long long> V;
  UF(long long sz = 1e6 + 5) { V.resize(sz, -1); }
  void clear() { fill(V.begin(), V.end(), -1); }
  long long top(long long x) { return V[x] == -1 ? x : V[x] = top(V[x]); }
  void unite(long long x, long long y) {
    x = top(x);
    y = top(y);
    if (x != y) V[x] = y;
  }
  bool query(long long x, long long y) { return top(x) == top(y); }
} U(N);
struct Vector {
  long long x, y;
  Vector() {}
  Vector(const long long &a, const long long &b) {
    x = a;
    y = b;
  }
} P[N];
long long n;
struct tt {
  long double l, r;
  tt(long double a = 0, long double b = 0) : l(a), r(b) {}
};
tt cut(long long x, long long y, long double R) {
  long double l = (long double)x - sqrt(R * 2.0 * y - y * y);
  long double r = (long double)x + sqrt(R * 2.0 * y - y * y);
  return tt(l, r);
}
tt Add(tt a, tt b) { return tt(max(a.l, b.l), min(a.r, b.r)); }
bool jud(long double R) {
  tt range(-1e16, 1e16);
  for (long long i = 1; i <= n; ++i) {
    if (R + R < P[i].y) return 0;
    range = Add(range, cut(P[i].x, P[i].y, R));
    if (range.r - range.l < -eps) {
      return 0;
    }
  }
  return 1;
}
int32_t main() {
  cin >> n;
  for (long long i = 1; i <= n; ++i) {
    scanf("%lld%lld", &P[i].x, &P[i].y);
    if (P[i].y > 0 && P[i - 1].y < 0) return !printf("-1");
    if (P[i].y < 0 && P[i - 1].y > 0) return !printf("-1");
  }
  for (long long i = 1; i <= n; ++i) P[i].y = abs(P[i].y);
  long double R = 0, t = 1e16;
  while (t > 1e-12) {
    if (jud(R))
      R -= t;
    else
      R += t;
    t /= 2;
  }
  printf("%.9Lf\n", R);
  return 0;
}
