#include <bits/stdc++.h>
using namespace std;
const int N = 111;
const long double Eps = 1e-6;
int sgn(long double a, long double b = 0) {
  a -= b;
  return (a > Eps) - (a < -Eps);
}
const long double Pi = 4 * atan(1);
struct Point {
  long double x, y;
  Point operator-(Point p) { return {x - p.x, y - p.y}; }
  Point operator+(Point p) { return {x + p.x, y + p.y}; }
  Point operator/(long double d) { return {x / d, y / d}; }
  bool operator<(Point p) const {
    if (sgn(x, p.x) == 0) return sgn(y, p.y) < 0;
    return sgn(x, p.x) < 0;
  }
  Point rot(long double d) {
    long double rx = x * cos(d) - y * sin(d);
    long double ry = x * sin(d) + y * cos(d);
    return {rx, ry};
  }
  long double len2() { return x * x + y * y; }
  long double len() { return sqrt(len2()); }
  long double dot(Point p) { return x * p.x + y * p.y; }
  long double cross(Point p) { return x * p.y - y * p.x; }
} p[N];
long double xmul(Point a, Point b, Point c) { return (b - a).cross(c - a); }
Point inter(Point p1, Point p2, Point q1, Point q2) {
  long double u = xmul(p1, p2, q1);
  long double v = xmul(p2, p1, q2);
  long double rx = (q1.x * v + q2.x * u) / (v + u);
  long double ry = (q1.y * v + q2.y * u) / (v + u);
  return {rx, ry};
}
class Cmp {
 public:
  bool operator()(long double a, long double b) const { return sgn(a, b) < 0; }
};
int main() {
  ios ::sync_with_stdio(false);
  int n;
  cin >> n;
  set<Point> st;
  for (int i = 0; i < n; i++) {
    cin >> p[i].x >> p[i].y;
    st.insert(p[i]);
  }
  bool found = false;
  long double ans = 0;
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++)
      for (int k = j + 1; k < n; k++) {
        if (sgn((p[j] - p[i]).dot(p[k] - p[i])) > 0 &&
            sgn((p[k] - p[j]).dot(p[i] - p[j])) > 0 &&
            sgn((p[i] - p[k]).dot(p[j] - p[k])) > 0) {
          Point mij = (p[i] + p[j]) / 2;
          Point dij = (p[i] - p[j]).rot(Pi / 2);
          Point mjk = (p[j] + p[k]) / 2;
          Point djk = (p[j] - p[k]).rot(Pi / 2);
          Point o = inter(mij, mij + dij, mjk, mjk + djk);
          bool flag = true;
          for (int r = 0; r < n; r++)
            if (sgn((p[r] - o).len2(), (p[i] - o).len2()) < 0) flag = false;
          if (flag) {
            found = true;
            ans = max(ans, (p[i] - o).len());
          }
        }
      }
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++) {
      Point mij = (p[i] + p[j]) / 2;
      Point dij = (p[j] - p[i]) / 2;
      Point pk = mij + dij.rot(Pi / 2);
      Point ps = mij - dij.rot(Pi / 2);
      if (st.find(pk) != st.end() && st.find(ps) != st.end()) {
        Point &o = mij;
        bool flag = true;
        for (int s = 0; s < n; s++)
          if (sgn((p[s] - o).len2(), (p[i] - o).len2()) < 0) flag = false;
        if (flag) {
          found = true;
          ans = max(ans, (p[i] - o).len());
        }
      }
    }
  if (!found)
    cout << -1 << '\n';
  else
    cout << setprecision(6) << ans << '\n';
  return 0;
}
