#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-10;
const long double PI = acos(-1.0);
int sgn(long double x) {
  if (fabs(x) < eps)
    return 0;
  else if (x < 0)
    return -1;
  else
    return 1;
}
struct Point {
  long double x, y;
  Point() {}
  Point(long double _x, long double _y) : x(_x), y(_y) {}
};
int tt[100010], n;
Point p[100010];
bool che(long double mid) {
  long double l = -1e7, r = 1e7;
  long double mid2 = mid * mid;
  for (int i = 1; i <= n; i++) {
    long double dis = fabs(p[i].y - mid);
    long double tmp = sqrt(mid2 - dis * dis);
    long double tl = p[i].x - tmp;
    long double tr = p[i].x + tmp;
    l = max(l, tl);
    r = min(r, tr);
    if (sgn(r - l) < 0) return 0;
  }
  return sgn(r - l) >= 0;
}
int main() {
  int my = 0;
  scanf("%d", &n);
  for (int i = 1, x, y; i <= n; i++) {
    scanf("%d%d", &x, &y);
    p[i] = Point(x, abs(y));
    tt[i] = y;
    my = max(my, abs(y));
  }
  sort(tt + 1, tt + 1 + n);
  if (tt[1] < 0 && tt[n] > 0) return 0 * printf("-1\n");
  long double l = my * 1.0 * 0.5, r = 1e16;
  int cnt = 0;
  while (sgn(r - l) > 0) {
    long double mid = (l + r) / 2.0;
    if (che(mid))
      r = mid;
    else
      l = mid;
    if (++cnt >= 200) break;
  }
  printf("%.10Lf\n", (l + r) / 2.0);
}
