#include <bits/stdc++.h>
using namespace std;
int N;
int x[110], y[110];
int dist[110][110];
double sdist[110][110];
struct point {
  double x, y;
};
point P[110];
double func(double a, double b, double c) {
  a = sqrt(a);
  b = sqrt(b);
  c = sqrt(c);
  return a * b * c /
         sqrt((a + b + c) * (-a + b + c) * (a - b + c) * (a + b - c));
}
point circumcenter(point P, point Q, point R) {
  double x1 = Q.x - P.x, y1 = Q.y - P.y, x2 = R.x - P.x, y2 = R.y - P.y;
  double x = (y2 * (x1 * x1 + y1 * y1) - y1 * (x2 * x2 + y2 * y2)) / 2.0 /
             (x1 * y2 - x2 * y1);
  double y = -(x2 * (x1 * x1 + y1 * y1) - x1 * (x2 * x2 + y2 * y2)) / 2.0 /
             (x1 * y2 - x2 * y1);
  point ans = {P.x + x, P.y + y};
  return ans;
}
bool check(point P, double D) {
  double x2 = P.x, y2 = P.y;
  int i;
  for ((i) = 0; (i) < (int)(N); (i)++) {
    double dx = x[i] - x2, dy = y[i] - y2;
    if ((dx * dx + dy * dy) / D < 1.0 - 1.0E-12) return false;
  }
  return true;
}
int main(void) {
  int i, j, k, l;
  cin >> N;
  for ((i) = 0; (i) < (int)(N); (i)++) cin >> x[i] >> y[i];
  for ((i) = 0; (i) < (int)(N); (i)++) {
    P[i].x = x[i];
    P[i].y = y[i];
  }
  double ans = -1.0;
  for ((i) = 0; (i) < (int)(N); (i)++)
    for ((j) = 0; (j) < (int)(N); (j)++) {
      int dx = x[i] - x[j], dy = y[i] - y[j];
      dist[i][j] = dx * dx + dy * dy;
      sdist[i][j] = sqrt(dist[i][j]);
    }
  for ((k) = 0; (k) < (int)(N); (k)++)
    for ((j) = 0; (j) < (int)(k); (j)++)
      for ((i) = 0; (i) < (int)(j); (i)++) {
        int d1 = dist[i][j], d2 = dist[j][k], d3 = dist[k][i];
        if (d1 + d2 > d3 && d2 + d3 > d1 && d3 + d1 > d2) {
          double tmp = func(d1, d2, d3);
          point O = circumcenter(P[i], P[j], P[k]);
          if (check(O, tmp * tmp)) ans = max(ans, tmp);
        }
      }
  for ((i) = 0; (i) < (int)(N); (i)++)
    for ((j) = 0; (j) < (int)(i); (j)++) {
      bool found = false;
      for ((k) = 0; (k) < (int)(N); (k)++)
        for ((l) = 0; (l) < (int)(k); (l)++) {
          if (!found && dist[i][j] == dist[k][l] && dist[i][k] == dist[j][l] &&
              dist[i][l] == dist[j][k] && dist[i][j] > dist[i][k] &&
              dist[i][j] > dist[i][l]) {
            found = true;
            double tmp = sdist[i][j] / 2.0;
            point O = {(x[i] + x[j]) / 2.0, (y[i] + y[j]) / 2.0};
            if (check(O, tmp * tmp)) ans = max(ans, tmp);
          }
        }
    }
  if (ans < -0.5) {
    cout << "-1" << endl;
  } else {
    printf("%.9f\n", ans);
  }
  return 0;
}
