#include <bits/stdc++.h>
using namespace std;
const int MAXN = 150;
const double eps = 1e-8;
struct point {
  double x, y;
  point() {}
  point(double _x, double _y) : x(_x), y(_y) {}
  friend bool operator<(const point &a, const point &b) {
    if (fabs(a.x - b.x) < eps) {
      return a.y < b.y;
    }
    return a.x < b.x;
  }
};
vector<point> vec;
map<point, int> vis;
point square1;
point CircumCenter(point a, point b, point c) {
  point cp;
  double a1 = b.x - a.x, b1 = b.y - a.y, c1 = (a1 * a1 + b1 * b1) / 2;
  double a2 = c.x - a.x, b2 = c.y - a.y, c2 = (a2 * a2 + b2 * b2) / 2;
  double d = a1 * b2 - a2 * b1;
  cp.x = a.x + (c1 * b2 - c2 * b1) / d;
  cp.y = a.y + (a1 * c2 - a2 * c1) / d;
  return cp;
}
double getDistance(point a, point b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
double dianji(point veca, point vecb) {
  return veca.x * vecb.x + veca.y * vecb.y;
}
bool isLenEqual(point a, point b, point c) {
  if (fabs(getDistance(a, b) - getDistance(a, c)) < eps) return true;
  return false;
}
int fdTriangle(point a, point b, point c) {
  point vecOne = point(a.x - b.x, a.y - b.y);
  point vecTwo = point(b.x - c.x, b.y - c.y);
  point vecThree = point(c.x - a.x, c.y - a.y);
  double dj1 = dianji(vecOne, vecTwo);
  double dj2 = dianji(vecTwo, vecThree);
  double dj3 = dianji(vecThree, vecOne);
  if (fabs(dj1) < eps || fabs(dj2) < eps || fabs(dj3) < eps) {
    if (fabs(dj1) < eps && isLenEqual(a, b, c)) {
      square1 = a;
      return 2;
    } else if (fabs(dj2) < eps && isLenEqual(c, a, b)) {
      square1 = c;
      return 2;
    } else if (fabs(dj3) < eps && isLenEqual(b, a, c)) {
      square1 = b;
      return 2;
    }
    return 0;
  }
  if (dj1 < 0 && dj2 < 0 && dj3 < 0) return 1;
  return 0;
}
void compute() {
  double mx = -1.0;
  point all_ans;
  int all_flag = 0;
  for (int i = 0; i < vec.size(); i++) {
    for (int j = 0; j < vec.size(); j++) {
      for (int k = 0; k < vec.size(); k++) {
        if (i == j || j == k || i == k) continue;
        int flag = 0;
        point pos_ans;
        point a = vec[i], b = vec[j], c = vec[k];
        if (!(fabs((b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y)) <
              eps)) {
          int type = fdTriangle(a, b, c);
          if (type == 1) {
            flag = 1;
            pos_ans = CircumCenter(a, b, c);
          } else if (type == 2) {
            point cc = CircumCenter(a, b, c);
            double X = 2 * cc.x - square1.x;
            double Y = 2 * cc.y - square1.y;
            if (vis[point(X, Y)] == 1) {
              flag = 1;
              pos_ans = cc;
            }
          }
        }
        if (flag == 1) {
          double r = getDistance(pos_ans, a);
          for (int z = 0; z < vec.size(); z++) {
            point each = vec[z];
            if (getDistance(pos_ans, each) + eps < r) {
              flag = 0;
              break;
            }
          }
          if (flag == 1 && mx < r) {
            mx = r;
            all_flag = 1;
            all_ans = pos_ans;
          }
        }
      }
    }
  }
  if (all_flag == 1) {
    printf("%.6f\n", mx);
  } else {
    printf("-1\n");
  }
}
int main() {
  int n;
  while (cin >> n) {
    vis.clear();
    vec.clear();
    for (int i = 0; i < n; i++) {
      double x, y;
      cin >> x >> y;
      point p = point(x, y);
      vec.push_back(p);
      vis[p] = 1;
    }
    compute();
  }
  return 0;
}
