#include <bits/stdc++.h>
int sqr(int a) { return a * a; }
double sqr(double a) { return a * a; }
const int nn = 105;
const double eps = 1e-10;
inline int dbcmp(double a) { return a < -eps ? -1 : (a > eps ? 1 : 0); }
inline double Abs(double a) { return a * dbcmp(a); }
struct point {
  double x, y;
  point(double X = 0, double Y = 0) { x = X, y = Y; }
};
inline double dot(point a, point b) { return a.x * b.x + a.y * b.y; }
inline double cross(point a, point b) { return a.x * b.y - a.y * b.x; }
inline double lenth(point a) { return sqrt(dot(a, a)); }
inline point operator+(point a, point b) { return point(a.x + b.x, a.y + b.y); }
inline point operator-(point a, point b) { return point(a.x - b.x, a.y - b.y); }
inline point operator*(point a, double b) { return point(a.x * b, a.y * b); }
inline int operator==(point a, point b) {
  return !dbcmp(a.x - b.x) && !dbcmp(a.y - b.y);
}
struct circle {
  point O;
  double r;
  circle(point P, double R = 0) { O = P, r = R; }
};
inline circle getcircle(point a, point b, point c) {
  double x1 = a.x, y1 = a.y, x2 = b.x, y2 = b.y, x3 = c.x, y3 = c.y;
  double D = ((sqr(x2) + sqr(y2) - sqr(x3) - sqr(y3)) * (y1 - y2) -
              (sqr(x1) + sqr(y1) - sqr(x2) - sqr(y2)) * (y2 - y3)) /
             ((x1 - x2) * (y2 - y3) - (x2 - x3) * (y1 - y2));
  double E =
      (dbcmp(y2 - y1) != 0)
          ? (sqr(x1) + sqr(y1) - sqr(x2) - sqr(y2) + D * (x1 - x2)) / (y2 - y1)
          : (sqr(x2) + sqr(y2) - sqr(x3) - sqr(y3) + D * (x2 - x3)) / (y3 - y2);
  double F = -(sqr(x1) + sqr(y1) + D * x1 + E * y1);
  return circle(point(-D / 2.0, -E / 2.0),
                sqrt((sqr(D) + sqr(E) - 4.0 * F) / 4.0));
}
inline int pan_PL_(point p, point a, point b) {
  return !dbcmp(cross(p - a, b - a));
}
int n, cnt, X[nn], Y[nn];
point P[nn], Q[nn * nn * nn];
double ti[nn * nn * nn];
double ans = -1;
std::map<std::pair<int, int>, int> vis;
inline void check1(point A, point B, point C) {
  if (dbcmp(dot(A - B, C - B)) == 1 && dbcmp(dot(A - C, B - C)) == 1 &&
      dbcmp(dot(B - A, C - A)) == 1) {
    circle cyc = getcircle(A, B, C);
    Q[++cnt] = cyc.O;
    ti[cnt] = cyc.r;
  }
}
inline void check2_(int i, int j, int k) {
  if (X[i] == X[j] && Y[i] < Y[j] && Y[i] == Y[k] && X[i] < X[k]) {
    if (vis[std::make_pair(X[k], Y[j])]) {
      Q[++cnt] = point((X[i] + X[k]) / 2.0, (Y[i] + Y[j]) / 2.0);
      ti[cnt] = lenth(P[j] - P[k]) / 2.0;
    }
  }
}
inline void check2(int i, int j, int k) {
  check2_(i, j, k);
  check2_(j, i, k);
  check2_(k, i, j);
  check2_(i, k, j);
  check2_(j, k, i);
  check2_(k, j, i);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d %d", X + i, Y + i);
    vis[std::make_pair(X[i], Y[i])] = 1;
    P[i] = point(X[i], Y[i]);
  }
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++)
      for (int k = j + 1; k <= n; k++)
        if (!pan_PL_(P[i], P[j], P[k])) {
          check1(P[i], P[j], P[k]);
          check2(i, j, k);
        }
  for (int i = 1; i <= cnt; i++) {
    int flag = 1;
    for (int j = 1; j <= n && flag; j++)
      flag &= (dbcmp(lenth(Q[i] - P[j]) - ti[i]) >= 0);
    if (flag) ans = std::max(ans, ti[i]);
  }
  printf("%lf\n", ans);
}
