#include <bits/stdc++.h>
using namespace std;
struct Point {
  long double x, y;
  Point() {}
  Point(long double a, long double b) : x(a), y(b) {}
};
const unsigned MAX = 1e5 + 5, STEPS = 150;
const long double EPS = 1e-9;
unsigned n;
Point p[MAX];
inline bool gt(const long double &x, const long double &y) {
  return x > y + EPS;
}
inline bool lt(const long double &x, const long double &y) {
  return y > x + EPS;
}
inline long double safe_sqrt(long double &x) { return x < 0 ? 0 : sqrt(x); }
inline bool Can(long double R) {
  long double l = -1e16 - 1, r = 1e16 + 1;
  for (unsigned i = 0; i < n; ++i) {
    long double b = -2 * p[i].x;
    long double c = p[i].x * p[i].x + p[i].y * p[i].y - 2 * p[i].y * R;
    long double D = b * b - 4 * c;
    if (lt(D, 0)) {
      return false;
    }
    D = safe_sqrt(D);
    long double x1 = p[i].x - D / 2, x2 = p[i].x + D / 2;
    l = max(l, x1);
    r = min(r, x2);
  }
  return !gt(l, r);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  bool negative = false, positive = false;
  long double x, y;
  for (unsigned i = 0; i < n; ++i) {
    cin >> x >> y;
    p[i] = Point(x, y);
    if (y > 0) {
      positive = true;
    } else {
      negative = true;
    }
  }
  if (positive && negative) {
    cout << -1;
    exit(0);
  }
  if (negative) {
    for (unsigned i = 0; i < n; ++i) {
      p[i].y = -p[i].y;
    }
  }
  long double L = 0, R = 1e16;
  std::function<long double(long double l, long double r)> middle;
  if (Can(1)) {
    R = 1;
    middle = [](long double l, long double r) { return (r + l) / 2.0; };
  } else {
    L = 1;
    middle = [](long double l, long double r) { return sqrt(r * l); };
  }
  for (unsigned i = 0; i < STEPS; ++i) {
    long double mid = middle(L, R);
    if (Can(mid)) {
      R = mid;
    } else {
      L = mid;
    }
  }
  cout.precision(16);
  cout << fixed << middle(L, R) << endl;
  return 0;
}
