#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void smin(T &a, U b) {
  if (a > b) a = b;
}
template <typename T, typename U>
inline void smax(T &a, U b) {
  if (a < b) a = b;
}
struct point {
  double first, second;
  point(double first = 0, double second = 0) : first(first), second(second) {}
  point operator-(point a) { return point(first - a.first, second - a.second); }
  point operator+(point a) { return point(first + a.first, second + a.second); }
  point operator*(double a) { return point(first * a, second * a); }
  point operator/(double a) { return point(first / a, second / a); }
  point operator&(point a) {
    return point(first * a.first - second * a.second,
                 first * a.second + second * a.first);
  }
  point rotate(double al) { return *this & point(cos(al), sin(al)); }
  point conj() { return point(-second, first); }
  double operator^(point a) { return first * a.second - second * a.first; }
  double operator*(point a) { return first * a.first + second * a.second; }
  point norm() {
    double s = nor();
    if (s < 1e-8) return *this;
    return point(first / s, second / s);
  }
  double nor() { return sqrt(*this * *this); }
  double al() { return atan2(second, first); }
  bool operator<(const point &a) const {
    if (fabs(first - a.first) > 1e-8) return first < a.first;
    return second < a.second - 1e-8;
  }
  bool operator>(const point &a) const {
    if (fabs(first - a.first) > 1e-8) return first > a.first;
    return second > a.second + 1e-8;
  }
  bool operator==(const point &a) const {
    if (fabs(first - a.first) > 1e-8) return 0;
    return fabs(second - a.second) < 1e-8;
  }
  void input() { scanf("%lf %lf", &first, &second); }
  void print() { printf("%lf %lf\n", first, second); }
};
point p[111];
double dst[111][111];
void tri_center(point &a, point &b, point &c, point &mid) {
  point ab = (a + b) / 2, ac = (a + c) / 2;
  point aa = (b - a).conj(), bb = (c - a).conj();
  double s = (aa ^ bb), st = (ac - ab) ^ bb;
  mid = ab + aa * (st / s);
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) p[i].input();
  point tmp[10];
  double r = 0, R;
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++)
      for (int k = j + 1; k < n; k++) {
        if (fabs((p[i] - p[j]) ^ (p[j] - p[k])) < 1e-8) continue;
        point a = p[i], b = p[j], c = p[k];
        if (a > b) swap(a, b);
        if (a > c) swap(a, c);
        if (b > c) swap(b, c);
        double ab = (a - b).nor(), ac = (a - c).nor(), bc = (b - c).nor();
        if (((ab) * (ab)) > ((ac) * (ac)) + ((bc) * (bc)) + 1e-8 ||
            ((ac) * (ac)) > ((bc) * (bc)) + ((ab) * (ab)) + 1e-8 ||
            ((bc) * (bc)) > ((ac) * (ac)) + ((ab) * (ab)) + 1e-8)
          continue;
        point mid, center;
        tri_center(a, b, c, center);
        R = (center - a).nor();
        int ok = 0;
        if (ab > 2 * R - 1e-8) mid = center * 2 - c, ok = 1;
        if (ac > 2 * R - 1e-8) mid = center * 2 - b, ok = 1;
        if (bc > 2 * R - 1e-8) mid = center * 2 - a, ok = 1;
        if (ok) {
          for (int ii = 0; ii < n; ii++)
            if (mid == p[ii]) {
              ok = 0;
              break;
            }
          if (ok) continue;
        }
        ok = 1;
        for (int ii = 0; ii < n; ii++)
          if ((center - p[ii]).nor() < R - 1e-8) {
            ok = 0;
            break;
          }
        if (ok) smax(r, R);
      }
  if (r < 1e-8)
    puts("-1");
  else
    printf("%.18lf\n", r);
  return 0;
}
