#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int n;
struct pos {
  double x, y;
} point[N], center;
struct equation {
  pos xi;
  double constant;
} line[N][N];
double ans = -1.0;
double dis(pos s, pos t) {
  double a = s.x - t.x;
  double b = s.y - t.y;
  double res = a * a + b * b;
  res = sqrt(res);
  return res;
}
pos find(equation s, equation t) {
  equation now;
  if (s.xi.x > 1e-8 || s.xi.x < -1e-8)
    now = s;
  else if (t.xi.x > 1e-8 || t.xi.x < -1e-8)
    now = t;
  s.xi.y *= t.xi.x;
  s.constant *= t.xi.x;
  t.xi.y *= s.xi.x;
  t.constant *= s.xi.x;
  s.xi.x *= t.xi.x;
  t.xi.x = s.xi.x;
  s.xi.y -= t.xi.y;
  s.constant -= t.constant;
  pos res;
  res.y = s.constant / s.xi.y;
  res.x = (now.constant - now.xi.y * res.y) / now.xi.x;
  return res;
}
double dianji(pos x, pos y) {
  double res = x.x * y.x + x.y * y.y;
  return res;
}
double cosval(int x, int y, int z) {
  pos a, b;
  a.x = point[x].x - point[y].x;
  a.y = point[x].y - point[y].y;
  b.x = point[z].x - point[y].x;
  b.y = point[z].y - point[y].y;
  double res = dianji(a, b);
  res /= dis(point[x], point[y]);
  res /= dis(point[z], point[y]);
  return res;
}
int main() {
  int i, j, k, s;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) scanf("%lf%lf", &point[i].x, &point[i].y);
  for (i = 1; i <= n; i++) {
    for (j = i + 1; j <= n; j++) {
      equation a, b;
      a.xi = point[i];
      a.constant = 1;
      b.xi = point[j];
      b.constant = 1;
      if (point[i].x == point[j].x) {
        line[i][j].xi.x = 1;
        line[i][j].constant = point[i].x;
      } else if (point[i].y == point[j].y) {
        line[i][j].xi.y = 1;
        line[i][j].constant = point[i].y;
      } else if (point[i].x * point[j].y == point[i].y * point[j].x) {
        line[i][j].xi.x = point[i].y - point[j].y;
        line[i][j].xi.y = point[j].x - point[i].x;
      } else {
        line[i][j].xi = find(a, b);
        line[i][j].constant = 1;
      }
      swap(line[i][j].xi.x, line[i][j].xi.y);
      line[i][j].xi.x = -line[i][j].xi.x;
      double za = (point[i].x + point[j].x) * 0.5;
      double zb = (point[i].y + point[j].y) * 0.5;
      line[i][j].constant = line[i][j].xi.x * za + line[i][j].xi.y * zb;
    }
  }
  for (i = 1; i <= n; i++) {
    for (j = i + 1; j <= n; j++) {
      for (k = j + 1; k <= n; k++) {
        double now = line[i][j].xi.x * line[j][k].xi.y;
        now -= line[i][j].xi.y * line[j][k].xi.x;
        if (now < 1e-8 && now > -1e-8) continue;
        center = find(line[i][j], line[j][k]);
        double jl = dis(center, point[i]);
        double minu = 2.0, maxu = -2.0, mind = 2.0, maxd = -2.0;
        bool hasu = 0, hasd = 0;
        for (s = 1; s <= n; s++) {
          now = dis(point[s], center);
          if (now - jl > 1e-8 || jl - now > 1e-8) continue;
          pos a, b;
          a.x = point[s].x - center.x;
          a.y = point[s].y - center.y;
          b.x = 1;
          b.y = 0;
          double val = dianji(a, b);
          val /= sqrt(a.x * a.x + a.y * a.y);
          if (a.y > 0) {
            minu = min(minu, val);
            maxu = max(maxu, val);
          } else {
            mind = min(mind, val);
            maxd = max(maxd, val);
          }
          if (a.y > 1e-8) hasu = 1;
          if (a.y < -1e-8) hasd = 1;
        }
        if (minu + mind > -1e-8) continue;
        if (maxu + maxd < 1e-8) continue;
        if (!hasu) continue;
        if (!hasd) continue;
        for (s = 1; s <= n; s++) {
          if (s == i || s == j || s == k) continue;
          double t = dis(center, point[s]);
          if (jl - t > 1e-8) break;
        }
        if (s > n) {
          if (ans < jl) ans = jl;
        }
      }
    }
  }
  if (ans < 0)
    printf("-1\n");
  else
    printf("%.6f\n", ans);
  return 0;
}
