#include <bits/stdc++.h>
using namespace std;
template <class S, class T>
ostream &operator<<(ostream &os, pair<S, T> p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <typename T>
ostream &operator<<(ostream &os, vector<T> v) {
  os << "[";
  for (int i = 0; i < int((v).size()); i++) os << v[i] << " ";
  return os << "]";
}
double INF = 1e50;
long double EPS = 1e-9;
long double PI = acos(-1.0);
struct pt {
  double x, y;
  pt() {}
  pt(double x, double y) : x(x), y(y) {}
  pt operator+(const pt &p) const { return pt(x + p.x, y + p.y); }
  pt operator-(const pt &p) const { return pt(x - p.x, y - p.y); }
  pt operator*(double c) const { return pt(x * c, y * c); }
  pt operator/(double c) const { return pt(x / c, y / c); }
  double norm() { return sqrt(x * x + y * y); }
  bool operator==(const pt &p) const {
    return fabs(x - p.x) < EPS && fabs(y - p.y) < EPS;
  }
  bool operator<(const pt &p) const {
    return make_pair(x, y) < make_pair(p.x, p.y);
  }
};
double dot(pt p, pt q) { return p.x * q.x + p.y * q.y; }
double dist2(pt p, pt q) { return dot(p - q, p - q); }
double cross(pt p, pt q) { return p.x * q.y - p.y * q.x; }
ostream &operator<<(ostream &os, const pt &p) {
  return os << "(" << p.x << "," << p.y << ")";
}
bool intersect(const pt &a, const pt &b, const pt &p, const pt &q, pt &ret) {
  double d1 = cross(p - a, b - a);
  double d2 = cross(q - a, b - a);
  if (fabs(d1 - d2) <= EPS) return 0;
  ret = (q * d1 - p * d2) / (d1 - d2);
  return 1;
}
vector<pt> polygonCut(vector<pt> &p, const pt &a, const pt &b) {
  vector<pt> res;
  for (int i = 0; i < int((p).size()); i++) {
    int j = (i + 1) % int((p).size());
    bool in1 = cross(b - a, p[i] - a) > EPS;
    bool in2 = cross(b - a, p[j] - a) > EPS;
    if (in1) {
      res.push_back(p[i]);
    }
    if (in1 ^ in2) {
      pt r;
      intersect(a, b, p[i], p[j], r);
      res.push_back(r);
    }
  }
  return res;
}
double distAnAn(double a, double b, bool directed = 0) {
  double p = fmod(2 * PI + fmod(b - a, 2 * PI), 2 * PI);
  if (directed) p = p > PI ? 2 * PI - p : p;
  return p;
}
bool comp(pt &p1, pt &p2) {
  return make_pair(p1.y, p1.x) < make_pair(p2.y, p2.x);
}
int main(int argc, char *argv[]) {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  vector<pt> rect = {pt(1e9, 1e9), pt(-1e9, 1e9), pt(-1e9, -1e9),
                     pt(1e9, -1e9)};
  int n;
  cin >> n;
  vector<pt> c(n);
  for (int i = 0; i < n; i++) {
    cin >> c[i].x >> c[i].y;
  }
  if (n < 3) {
    cout << -1 << '\n';
    return 0;
  }
  set<pt> holes;
  for (int i = 0; i < n; i++) {
    vector<pt> poly = rect;
    for (int j = 0; j < n; j++) {
      if (i != j) {
        pt m = (c[i] + c[j]) / 2;
        pt v = c[j] - c[i];
        swap(v.x, v.y);
        v.x *= -1;
        poly = polygonCut(poly, m, m + v);
      }
    }
    for (auto &k : poly) {
      if (fabs(k.x) < 1e8 && fabs(k.y) < 1e8) {
        holes.insert(k);
      }
    }
  }
  double ans = 0;
  for (auto &k : holes) {
    vector<pt> phis;
    for (int i = 0; i < n; i++) {
      pt v = c[i] - k;
      double phi = atan2(v.y, v.x);
      if (phi < 0) phi += 2 * PI;
      phis.push_back(pt((c[i] - k).norm(), phi));
    }
    sort(phis.begin(), phis.end());
    int j = 3;
    while (j < n && fabs(phis[j].x - phis[j - 1].x) < EPS) j++;
    phis.resize(j);
    sort(phis.begin(), phis.end(), comp);
    bool b = true;
    for (int i = 0; i < j; i++) {
      int k = (i + 1) % j;
      double dphi = distAnAn(phis[i].y, phis[k].y);
      b = b && dphi < (PI - EPS);
    }
    if (b) {
      ans = max(ans, phis[0].x);
    }
  }
  cout << setprecision(10) << (fabs(ans) < EPS ? -1 : ans) << '\n';
  return 0;
}
