#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;
}
template <class T>
inline void gn(T &first) {
  char c, sg = 0;
  while (c = getchar(), (c > '9' || c < '0') && c != '-')
    ;
  for ((c == '-' ? sg = 1, c = getchar() : 0), first = 0; c >= '0' && c <= '9';
       c = getchar())
    first = (first << 1) + (first << 3) + c - '0';
  if (sg) first = -first;
}
template <class T, class T1>
inline void gn(T &first, T1 &second) {
  gn(first);
  gn(second);
}
template <class T, class T1, class T2>
inline void gn(T &first, T1 &second, T2 &z) {
  gn(first);
  gn(second);
  gn(z);
}
template <class T>
inline void print(T first) {
  if (first < 0) {
    putchar('-');
    return print(-first);
  }
  if (first < 10) {
    putchar('0' + first);
    return;
  }
  print(first / 10);
  putchar(first % 10 + '0');
}
template <class T>
inline void printsp(T first) {
  print(first);
  putchar(' ');
}
template <class T>
inline void println(T first) {
  print(first);
  putchar('\n');
}
template <class T, class U>
inline void print(T first, U second) {
  printsp(first);
  println(second);
}
template <class T, class U, class V>
inline void print(T first, U second, V z) {
  printsp(first);
  printsp(second);
  println(z);
}
int power(int a, int b, int m, int ans = 1) {
  for (; b; b >>= 1, a = 1LL * a * a % m)
    if (b & 1) ans = 1LL * ans * a % m;
  return ans;
}
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)); }
  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);
  }
  point conj() { return point(-second, first); }
  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;
  }
  bool operator!=(const point &a) const {
    if (*this == a) return false;
    return true;
  }
  void input() { scanf("%lf %lf", &first, &second); }
  void print() { printf("%lf %lf\n", first, second); }
};
double dist(point a, point b) {
  return sqrt((a.first - b.first) * (a.first - b.first) +
              (a.second - b.second) * (a.second - b.second));
}
int sgn(double a) { return (a > 1e-8) - (a < -1e-8); }
bool is_on(point a, point b, point c) {
  if (sgn(a - b ^ b - c)) return 0;
  return sgn((a - c) * (b - c)) <= 0;
}
bool intersect(point a, point b, point c, point d, point &ans) {
  if (min(a.first, b.first) > max(c.first, d.first) + 1e-8) return 0;
  if (max(a.first, b.first) < min(c.first, d.first) - 1e-8) return 0;
  if (min(a.second, b.second) > max(c.second, d.second) + 1e-8) return 0;
  if (max(a.second, b.second) < min(c.second, d.second) - 1e-8) return 0;
  if (sgn((a - b) ^ (c - b)) * sgn((a - b) ^ (d - b)) >= 0) return 0;
  if (sgn((c - d) ^ (a - d)) * sgn((c - d) ^ (b - d)) >= 0) return 0;
  double sc = fabs((a - b) ^ (b - c)), sd = fabs((a - b) ^ (b - d));
  ans = (c * sd + d * sc) / (sc + sd);
  return 1;
}
double angle(point a, point b) {
  double res = a * b / a.nor() / b.nor();
  res = acos(res);
  return res;
}
double angle(point a, point b, point c) { return angle(a - c, b - c); }
double pdist(point c, point a, point b) {
  point aa = c - a, bb = c - b, ab = a - b;
  if (sgn(aa * ab) >= 0) return aa.nor();
  if (sgn(bb * ab) <= 0) return bb.nor();
  return fabs(aa ^ bb) / ab.nor();
}
bool is_in_poly(point a, point *p, int n) {
  for (int i = 0; i < n; i++)
    if (is_on(p[i], p[i + 1], a)) return 1;
  int cnt = 0;
  for (int i = 0; i < n; i++) {
    point b = p[i], c = p[i + 1];
    if (b > c) swap(b, c);
    if (sgn(c - b ^ a - b) < 0 && b.first < a.first - 1e-8 &&
        a.first < c.first + 1e-8)
      cnt++;
  }
  return cnt & 1;
}
point capture_centre(point &a, point &b, point &c) {
  point bb = (a + b) / 2, cc = (a + c) / 2;
  point bbb = (b - a).conj(), ccc = (c - a).conj();
  double s = (bbb ^ ccc), t = (cc - bb) ^ ccc;
  return bb + bbb * (t / s);
}
point p[111];
int main() {
  int n;
  gn(n);
  for (int i = 1; i <= n; i++) p[i].input();
  int tag = 0;
  double ans = 0;
  for (int i1 = 1; i1 <= n; i1++)
    for (int i2 = i1 + 1; i2 <= n; i2++)
      for (int i3 = i2 + 1; i3 <= n; i3++) {
        point a = p[i1], b = p[i2], c = p[i3];
        if ((b - a) * (c - a) < -1e-8 || (a - b) * (c - b) < -1e-8 ||
            (a - c) * (b - c) < -1e-8)
          continue;
        point d = capture_centre(a, b, c);
        double r = (d - a).nor();
        if (is_on(a, c, d)) swap(c, b);
        if (is_on(b, c, d)) swap(c, a);
        if (is_on(a, b, d)) {
          int flag = 0, cnt = 0;
          for (int i = 1; i <= n; i++)
            if (i != i1 && i != i2 && i != i3) {
              if ((p[i] - d).nor() < r - 1e-8) flag++;
              if (fabs((p[i] - d).nor() - r) < 1e-8 &&
                  sgn(p[i] - a ^ b - a) == sgn(b - a ^ c - a))
                cnt++;
            }
          if (!flag && cnt) {
            smax(ans, r);
            tag++;
          }
        } else {
          int flag = 0;
          for (int i = 1; i <= n; i++)
            if (i != i1 && i != i2 && i != i3) {
              if ((p[i] - d).nor() < r - 1e-8) flag++;
            }
          if (!flag) {
            smax(ans, r);
            tag++;
          }
        }
      }
  if (tag)
    printf("%.9lf\n", ans);
  else
    puts("-1");
  return 0;
}
