#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
  friend bool operator<(const point &p, const point &q) {
    if (p.x != q.x) return p.x < q.x;
    return p.y < q.y;
  }
} a[110];
double dis(point p, point q) {
  return (p.x - q.x) * (p.x - q.x) + (p.y - q.y) * (p.y - q.y);
}
int judge(point a, point b, point c) {
  double x = dis(a, b);
  double y = dis(b, c);
  double z = dis(a, c);
  if (x + y > z && x + z > y && y + z > x) return 1;
  if (x + y < z || x + z < y || y + z < x) return 0;
  return -1;
}
int n;
int find(point p) {
  int lt = 1, rt = n, mid;
  while (lt <= rt) {
    mid = (lt + rt) / 2;
    if (fabs(a[mid].x - p.x) < 1e-8 && fabs(a[mid].y - p.y) < 1e-8) return 1;
    if (a[mid].x > p.x)
      rt = mid - 1;
    else if (a[mid].x < p.x)
      lt = mid + 1;
    else if (a[mid].y > p.y)
      rt = mid - 1;
    else
      lt = mid + 1;
  }
  return 0;
}
struct line {
  point a, b;
};
point intersection(line u, line v) {
  point ret = u.a;
  double t =
      ((u.a.x - v.a.x) * (v.a.y - v.b.y) - (u.a.y - v.a.y) * (v.a.x - v.b.x)) /
      ((u.a.x - u.b.x) * (v.a.y - v.b.y) - (u.a.y - u.b.y) * (v.a.x - v.b.x));
  ret.x += (u.b.x - u.a.x) * t;
  ret.y += (u.b.y - u.a.y) * t;
  return ret;
}
point circumcenter(point a, point b, point c) {
  line u, v;
  u.a.x = (a.x + b.x) / 2;
  u.a.y = (a.y + b.y) / 2;
  u.b.x = u.a.x - a.y + b.y;
  u.b.y = u.a.y + a.x - b.x;
  v.a.x = (a.x + c.x) / 2;
  v.a.y = (a.y + c.y) / 2;
  v.b.x = v.a.x - a.y + c.y;
  v.b.y = v.a.y + a.x - c.x;
  return intersection(u, v);
}
bool check(point p, double x) {
  for (int i = 1; i <= n; i++)
    if (dis(p, a[i]) < x - 1e-8) return false;
  return true;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%lf%lf", &a[i].x, &a[i].y);
  sort(a + 1, a + n + 1);
  double ans = -1;
  for (int i = 1; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      for (int k = j + 1; k <= n; k++) {
        int flag = judge(a[i], a[j], a[k]);
        if (!flag) continue;
        double x = dis(a[i], a[j]);
        double y = dis(a[j], a[k]);
        double z = dis(a[i], a[k]);
        if (flag == -1) {
          if (fabs(x + y - z) < 1e-8) {
            point p;
            p.x = a[i].x + a[k].x - a[j].x;
            p.y = a[i].y + a[k].y - a[j].y;
            if (!find(p)) continue;
          }
          if (fabs(x + z - y) < 1e-8) {
            point p;
            p.x = a[k].x + a[j].x - a[i].x;
            p.y = a[k].y + a[j].y - a[i].y;
            if (!find(p)) continue;
          }
          if (fabs(y + z - x) < 1e-8) {
            point p;
            p.x = a[j].x + a[i].x - a[k].x;
            p.y = a[j].y + a[i].y - a[k].y;
            if (!find(p)) continue;
          }
        }
        point p = circumcenter(a[i], a[j], a[k]);
        if (check(p, dis(p, a[i]))) ans = max(ans, sqrt(dis(p, a[i])));
      }
    }
  }
  printf("%.10lf\n", ans);
  return 0;
}
