#include <bits/stdc++.h>
using namespace std;
const double PI = 2.0 * acos(0.0);
const double EPS = 1e-6;
inline int DIST_POW(pair<int, int> p1, pair<int, int> p2) {
  return (p1.first - p2.first) * (p1.first - p2.first) +
         (p1.second - p2.second) * (p1.second - p2.second);
}
inline double DIST(pair<int, int> p1, pair<int, int> p2) {
  return sqrt(DIST_POW(p1, p2));
}
pair<int, int> vtx[105];
int n;
inline int DETER(int a, int b, int c, int d) { return a * d - b * c; }
pair<double, double> circum(pair<int, int> a, pair<int, int> b,
                            pair<int, int> c) {
  int delta = 4 * DETER(c.second - a.second, a.second - b.second,
                        a.first - c.first, b.first - a.first);
  int delta_x = 2 * DETER(b.first - c.first, a.second - b.second,
                          b.second - c.second, b.first - a.first);
  double t = (double)delta_x / delta;
  double x = (a.first + c.first) / 2.0 + t * (c.second - a.second);
  double y = (a.second + c.second) / 2.0 + t * (a.first - c.first);
  return make_pair(x, y);
}
bool is_covered(pair<double, double> p, double r) {
  for (int i = 0; i < n; i++) {
    if ((((p.first - vtx[i].first) * (p.first - vtx[i].first) +
          (p.second - vtx[i].second) * (p.second - vtx[i].second)) <
         (r * r) - EPS))
      return true;
  }
  return false;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d %d", &vtx[i].first, &vtx[i].second);
  sort(vtx, vtx + n);
  double res = -1;
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++)
      for (int k = j + 1; k < n; k++) {
        int a = DIST_POW(vtx[j], vtx[k]);
        int b = DIST_POW(vtx[i], vtx[k]);
        int c = DIST_POW(vtx[i], vtx[j]);
        double aa = sqrt(a);
        double bb = sqrt(b);
        double cc = sqrt(c);
        int ep[3] = {a, b, c};
        sort(ep, ep + 3);
        if (ep[0] + ep[1] > ep[2]) {
          pair<double, double> ori = circum(vtx[i], vtx[j], vtx[k]);
          double r =
              sqrt((ori.first - vtx[i].first) * (ori.first - vtx[i].first) +
                   (ori.second - vtx[i].second) * (ori.second - vtx[i].second));
          if (r > res && !is_covered(ori, r)) res = r;
        } else if (ep[0] + ep[1] == ep[2]) {
          if (a + b == c) {
            pair<int, int> vd =
                make_pair(vtx[i].first + vtx[j].first - vtx[k].first,
                          vtx[i].second + vtx[j].second - vtx[k].second);
            if (binary_search(vtx, vtx + n, vd)) {
              double r = cc / 2.0;
              pair<double, double> ori =
                  make_pair((vtx[i].first + vtx[j].first) / 2.0,
                            (vtx[i].second + vtx[j].second) / 2.0);
              if (r > res && !is_covered(ori, r)) res = r;
            }
          } else if (a + c == b) {
            pair<int, int> vd =
                make_pair(vtx[i].first + vtx[k].first - vtx[j].first,
                          vtx[i].second + vtx[k].second - vtx[j].second);
            if (binary_search(vtx, vtx + n, vd)) {
              double r = bb / 2.0;
              pair<double, double> ori =
                  make_pair((vtx[i].first + vtx[k].first) / 2.0,
                            (vtx[i].second + vtx[k].second) / 2.0);
              if (r > res && !is_covered(ori, r)) res = r;
            }
          } else if (b + c == a) {
            pair<int, int> vd =
                make_pair(vtx[j].first + vtx[k].first - vtx[i].first,
                          vtx[j].second + vtx[k].second - vtx[i].second);
            if (binary_search(vtx, vtx + n, vd)) {
              double r = aa / 2.0;
              pair<double, double> ori =
                  make_pair((vtx[j].first + vtx[k].first) / 2.0,
                            (vtx[j].second + vtx[k].second) / 2.0);
              if (r > res && !is_covered(ori, r)) res = r;
            }
          }
        }
      }
  if ((abs((res) - (-1)) < EPS))
    puts("-1");
  else
    printf("%.6lf\n", res);
  return 0;
}
