#include <bits/stdc++.h>
#pragma warning(disable : 4996)
using namespace std;
using namespace std;
const double eps = 1e-8;
const double pi = acos(-1.0);
inline double sqr(double x) { return x * x; }
int cmp(double x) {
  if (fabs(x) < eps) return 0;
  if (x > 0) return 1;
  return -1;
}
int n;
struct point {
  double x, y;
  point() {}
  point(double a, double b) : x(a), y(b) {}
  void input() { scanf("%lf%lf", &x, &y); }
  friend point operator+(const point &a, const point &b) {
    return point(a.x + b.x, a.y + b.y);
  }
  friend point operator-(const point &a, const point &b) {
    return point(a.x - b.x, a.y - b.y);
  }
  friend bool operator==(const point &a, const point &b) {
    return cmp(a.x - b.x) == 0 && cmp(a.y - b.y) == 0;
  }
  friend point operator*(const point &a, const double &b) {
    return point(a.x * b, a.y * b);
  }
  friend point operator*(const double &a, const point &b) {
    return point(a * b.x, a * b.y);
  }
  friend point operator/(const point &a, const double &b) {
    return point(a.x / b, a.y / b);
  }
  double norm() { return sqrt(sqr(x) + sqr(y)); }
  double norm1() { return sqr(x) + sqr(y); }
} P[200];
double det(const point &a, const point &b) { return a.x * b.y - a.y * b.x; }
point Cir(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 dot(const point &a, const point &b) { return a.x * b.y + a.y * b.x; }
double dist(const point &a, const point &b) { return (a - b).norm(); }
double dist2(const point &a, const point &b) { return (a - b).norm1(); }
bool JudgeRet(int a, int b, int c) {
  double dis1 = dist2(P[a], P[b]);
  double dis2 = dist2(P[a], P[c]);
  double dis3 = dist2(P[b], P[c]);
  if ((cmp(dis1 + dis2 - dis3) == 1) && (cmp(dis2 + dis3 - dis1) == 1) &&
      (cmp(dis1 + dis3 - dis2) == 1))
    return true;
  else if (cmp(dis1 + dis2 - dis3) == 0 || cmp(dis1 + dis3 - dis2) == 0 ||
           cmp(dis2 + dis3 - dis1) == 0) {
    if (cmp(dis1 + dis2 - dis3) == 0) {
      for (int i = 1; i <= n; i++) {
        if (cmp(P[i].x - (P[b].x + P[c].x - P[a].x)) == 0 &&
            cmp(P[i].y - (P[b].y + P[c].y - P[a].y)) == 0) {
          return true;
        }
      }
    } else if (cmp(dis1 + dis3 - dis2) == 0) {
      for (int i = 1; i <= n; i++) {
        if (cmp(P[i].x - (P[a].x + P[c].x - P[b].x)) == 0 &&
            cmp(P[i].y - (P[a].y + P[c].y - P[b].y)) == 0) {
          return true;
        }
      }
    } else {
      for (int i = 1; i <= n; i++) {
        if (cmp(P[i].x - (P[a].x + P[b].x - P[c].x)) == 0 &&
            cmp(P[i].y - (P[a].y + P[b].y - P[c].y)) == 0) {
          return true;
        }
      }
    }
    return false;
  } else
    return false;
}
void Compute() {
  double Max = -1;
  JudgeRet(2, 3, 5);
  for (int i = 1; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      for (int k = j + 1; k <= n; k++) {
        if (JudgeRet(i, j, k)) {
          point center = Cir(P[i], P[j], P[k]);
          double r = dist(center, P[i]);
          bool ret = true;
          for (int i = 1; i <= n; i++) {
            if (cmp(dist(center, P[i]) - r) == -1) {
              ret = false;
              break;
            }
          }
          if (ret) Max = max(Max, r);
        }
      }
    }
  }
  if (Max == -1)
    printf("-1\n");
  else
    printf("%.6f\n", Max);
}
int main() {
  double x, y;
  while (~scanf("%d", &n)) {
    for (int i = 1; i <= n; i++) {
      scanf("%lf%lf", &x, &y);
      P[i] = point(x, y);
    }
    Compute();
  }
  return 0;
}
