#include <bits/stdc++.h>
using namespace std;
const double kEps = 1E-6;
const int kMaxN = 100;
int n;
inline int sgn(double x) {
  if (fabs(x) < kEps) return 0;
  if (x > 0.0) return 1;
  return -1;
}
struct Point {
  double x, y;
  double th;
  Point() {}
  Point(double x_, double y_) : x(x_), y(y_) {}
  bool operator<(const Point &t) const { return (th < t.th); }
} p[kMaxN], q[kMaxN];
Point operator-(const Point &a, const Point &b) {
  return Point(a.x - b.x, a.y - b.y);
}
double det(const Point &a, const Point &b) { return (a.x * b.y - b.x * a.y); }
double len(const Point &v) { return sqrt(((v.x) * (v.x)) + ((v.y) * (v.y))); }
double mat[2][3];
void Make(int row, const Point &a, const Point &b) {
  mat[row][0] = 2.0 * (b.x - a.x);
  mat[row][1] = 2.0 * (b.y - a.y);
  mat[row][2] =
      ((b.x) * (b.x)) - ((a.x) * (a.x)) + ((b.y) * (b.y)) - ((a.y) * (a.y));
}
void Work() {
  for (int i = 0, j = 0, k; i < 2; ++i, ++j) {
    for (k = j; k < 2; ++k)
      if (sgn(mat[k][i]) != 0) break;
    if (k == 2) continue;
    for (int p = 0; p < 3; ++p) swap(mat[k][p], mat[j][p]);
    for (k = 0; k < 2; ++k)
      if (k != j) {
        double t = mat[k][i] / mat[j][i];
        for (int p = 0; p < 3; ++p) mat[k][p] -= mat[j][p] * t;
      }
  }
  for (int i = 0; i < 2; ++i) mat[i][2] /= mat[i][i];
}
Point Calc(const Point &A, const Point &B, const Point &C) {
  Make(0, A, B);
  Make(1, B, C);
  Work();
  return Point(mat[0][2], mat[1][2]);
}
double len2(const Point &v) { return ((len(v)) * (len(v))); }
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) scanf("%lf%lf", &p[i].x, &p[i].y);
  random_shuffle(p, p + n);
  double res = 0.0;
  for (int i = 0; i < n - 2; ++i)
    for (int j = i + 1; j < n - 1; ++j)
      for (int k = j + 1; k < n; ++k) {
        q[0] = p[i], q[1] = p[j], q[2] = p[k];
        if (sgn(det(q[0] - q[1], q[0] - q[2])) == 0) continue;
        Point core = Calc(q[0], q[1], q[2]);
        double rad = len(core - q[0]);
        bool chk = true;
        int m = 0;
        for (int l = 0; l < n; ++l) {
          double dis = len(core - p[l]);
          if (sgn(dis - rad) < 0) {
            chk = false;
            break;
          } else if (sgn(dis - rad) == 0)
            q[m++] = p[l];
        }
        if (!chk) continue;
        if (rad <= res) continue;
        for (int l = 0; l < m; ++l)
          q[l].th = atan2(q[l].y - core.y, q[l].x - core.x);
        sort(q, q + m);
        for (int l = 0; l < m; ++l) {
          int r = (l + 1) % m;
          if (sgn(det(core - q[l], q[r] - q[l])) >= 0) {
            chk = false;
            break;
          }
        }
        if (chk) res = rad;
      }
  if (sgn(res) == 0)
    puts("-1");
  else
    printf("%.6lf\n", res);
  return 0;
}
