#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
struct _hash {
  int operator()(const complex<double> &p) const {
    return p.real() * 20001 + p.imag();
  }
};
int n;
complex<double> p[100];
unordered_set<complex<double>, _hash> pnts;
double ans = -1;
inline int compare(const double &a, const double &b) {
  if (fabs(a - b) < eps) return 0;
  return a < b ? -1 : 1;
}
bool intersect(const complex<double> &a, const complex<double> &b,
               const complex<double> &p, const complex<double> &q,
               complex<double> &ret) {
  double d1 = ((conj(p - a) * (b - a)).imag());
  double d2 = ((conj(q - a) * (b - a)).imag());
  ret = (d1 * q - d2 * p) / (d1 - d2);
  return (fabs(d1 - d2) > eps);
}
complex<double> findCenter(const complex<double> &a, const complex<double> &b,
                           const complex<double> &c) {
  complex<double> m1 = (((a) + (b)) / 2.0);
  complex<double> m2 = (((b) + (c)) / 2.0);
  complex<double> p1 =
      (complex<double>(-(((b) - (a))).imag(), (((b) - (a))).real()));
  complex<double> p2 =
      (complex<double>(-(((c) - (b))).imag(), (((c) - (b))).real()));
  complex<double> r;
  assert(intersect(m1, m1 + p1, m2, m2 + p2, r));
  return r;
}
void check(const complex<double> &center, const double &r) {
  double minDist = 1e9;
  for (int i = 0; i < n; ++i)
    minDist = min(minDist, (hypot((((p[i]) - (center))).real(),
                                  (((p[i]) - (center))).imag())));
  if (compare(minDist, r) < 0) return;
  assert(compare(r, minDist) == 0);
  ans = max(ans, r);
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    int x, y;
    scanf("%d %d", &x, &y);
    pnts.insert(p[i] = complex<double>(x, y));
  }
  for (int i = 0; i < n; ++i)
    for (int j = i + 1; j < n; ++j)
      for (int k = j + 1; k < n; ++k) {
        complex<double> triangle[3] = {p[i], p[j], p[k]};
        for (int a = 0; a < 3; ++a) {
          int b = (a + 1) % 3;
          int c = (b + 1) % 3;
          double d = ((conj(((triangle[b]) - (triangle[a]))) *
                       (((triangle[c]) - (triangle[a]))))
                          .real());
          if (d < 0) goto next;
          if (d == 0) {
            if (!compare((hypot((((triangle[b]) - (triangle[a]))).real(),
                                (((triangle[b]) - (triangle[a]))).imag())),
                         (hypot((((triangle[c]) - (triangle[a]))).real(),
                                (((triangle[c]) - (triangle[a]))).imag())))) {
              {
                complex<double> p = ((triangle[a]) - (triangle[b]));
                complex<double> m = ((triangle[c]) - (triangle[b]));
                complex<double> _4th = conj(p / m) * m;
                if (pnts.find(_4th) == pnts.end()) goto next;
                {
                  complex<double> center =
                      (((triangle[b]) + (triangle[c])) / 2.0);
                  check(center, (hypot((((triangle[0]) - (center))).real(),
                                       (((triangle[0]) - (center))).imag())));
                }
              }
            }
            goto next;
          }
        }
        {
          complex<double> center =
              findCenter(triangle[0], triangle[1], triangle[2]);
          check(center, (hypot((((triangle[0]) - (center))).real(),
                               (((triangle[0]) - (center))).imag())));
        }
      next:;
      }
  printf("%.17lf\n", ans);
  return 0;
}
