#include <bits/stdc++.h>
using namespace std;
template <typename T>
struct Point {
  T x;
  T y;
  Point() {}
  Point(T x, T y) : x(x), y(y) {}
  Point operator-(const Point& A) { return Point(x - A.x, y - A.y); }
  T lensq(void) { return x * x + y * y; }
};
const double EPS = 1e-9;
vector<Point<int>> v;
bool is_right_angle(int i, int j, int k) {
  int a = (v[i] - v[k]).lensq();
  int b = (v[i] - v[j]).lensq();
  int c = (v[j] - v[k]).lensq();
  if (a < b) swap(a, b);
  if (a < c) swap(a, c);
  return a == b + c;
}
bool is_acute(int i, int j, int k) {
  int a = (v[i] - v[k]).lensq();
  int b = (v[i] - v[j]).lensq();
  int c = (v[j] - v[k]).lensq();
  if (a < b) swap(a, b);
  if (a < c) swap(a, c);
  return a < b + c;
}
template <typename T1, typename T2>
double dist(Point<T1> A, Point<T2> B) {
  double dx = A.x - B.x;
  double dy = A.y - B.y;
  return sqrt(dx * dx + dy * dy);
}
bool check(Point<double> hole, double d, int n) {
  for (int a = 0; a < n; a++) {
    if (dist(v[a], hole) <= d - EPS) {
      return false;
    }
  }
  return true;
}
int main(void) {
  int n;
  int x, y;
  double ans = -1;
  scanf(" %d", &n);
  for (int i = 0; i < n; i++) {
    scanf(" %d %d", &x, &y);
    v.push_back(Point<int>(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++) {
        if (is_right_angle(i, j, k)) {
          for (int p = k + 1; p < n; p++) {
            if (is_right_angle(j, k, p) && is_right_angle(k, p, i) &&
                is_right_angle(p, i, j)) {
              double D =
                  2 * (v[i].x * (v[j].y - v[k].y) + v[j].x * (v[k].y - v[i].y) +
                       v[k].x * (v[i].y - v[j].y));
              double cx =
                  (1.0 / D) * (1.0 * (v[i].x * v[i].x + v[i].y * v[i].y) *
                                   (v[j].y - v[k].y) +
                               1.0 * (v[j].x * v[j].x + v[j].y * v[j].y) *
                                   (v[k].y - v[i].y) +
                               1.0 * (v[k].x * v[k].x + v[k].y * v[k].y) *
                                   (v[i].y - v[j].y));
              double cy =
                  (1.0 / D) * (1.0 * (v[i].x * v[i].x + v[i].y * v[i].y) *
                                   (v[k].x - v[j].x) +
                               1.0 * (v[j].x * v[j].x + v[j].y * v[j].y) *
                                   (v[i].x - v[k].x) +
                               1.0 * (v[k].x * v[k].x + v[k].y * v[k].y) *
                                   (v[j].x - v[i].x));
              Point<double> hole = Point<double>(cx, cy);
              double d = dist(hole, v[i]);
              if (check(hole, d, n) && (ans < 0 || d > ans)) {
                ans = d;
              }
            }
          }
        } else if (is_acute(i, j, k)) {
          double D =
              2 * (v[i].x * (v[j].y - v[k].y) + v[j].x * (v[k].y - v[i].y) +
                   v[k].x * (v[i].y - v[j].y));
          double cx =
              (1.0 / D) *
              (1.0 * (v[i].x * v[i].x + v[i].y * v[i].y) * (v[j].y - v[k].y) +
               1.0 * (v[j].x * v[j].x + v[j].y * v[j].y) * (v[k].y - v[i].y) +
               1.0 * (v[k].x * v[k].x + v[k].y * v[k].y) * (v[i].y - v[j].y));
          double cy =
              (1.0 / D) *
              (1.0 * (v[i].x * v[i].x + v[i].y * v[i].y) * (v[k].x - v[j].x) +
               1.0 * (v[j].x * v[j].x + v[j].y * v[j].y) * (v[i].x - v[k].x) +
               1.0 * (v[k].x * v[k].x + v[k].y * v[k].y) * (v[j].x - v[i].x));
          Point<double> hole = Point<double>(cx, cy);
          double d = dist(hole, v[i]);
          if (check(hole, d, n) && (ans < 0 || d > ans)) {
            ans = d;
          }
        }
      }
    }
  }
  if (ans < 0) {
    printf("-1\n");
  } else {
    printf("%.12f\n", ans);
  }
  return 0;
}
