#include <bits/stdc++.h>
using namespace std;
double error = 1e-7;
double prodesc(complex<double> p1, complex<double> p2) {
  return real(conj(p1) * p2);
}
double prodvec(complex<double> p1, complex<double> p2) {
  return imag(conj(p1) * p2);
}
bool paralel(complex<double> v1, complex<double> v2) {
  return abs(prodvec(v1, v2)) < error;
}
bool alineados(complex<double> p1, complex<double> p2, complex<double> p3) {
  return paralel(p2 - p1, p3 - p1);
}
complex<double> intersec(complex<double> p1, complex<double> v1,
                         complex<double> p2, complex<double> v2) {
  return p1 + prodvec(p2 - p1, v2) / prodvec(v1, v2) * v1;
}
complex<double> leer() {
  double x, y;
  cin >> x >> y;
  return complex<double>(x, y);
}
void ortogonal(complex<double> p1, complex<double> p2, complex<double> &p,
               complex<double> &v) {
  p = 0.5 * (p1 + p2);
  v = complex<double>(0, 1) * (1 / abs(p2 - p1)) * (p2 - p1);
}
int main() {
  cout.setf(ios::fixed);
  cout.precision(10);
  int n;
  cin >> n;
  vector<complex<double> > vec(n);
  for (int i = 0; i < n; i++) vec[i] = leer();
  double sol = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (i != j) {
        complex<double> p1 = vec[i];
        complex<double> p2 = vec[j];
        complex<double> p, v;
        ortogonal(p1, p2, p, v);
        double dist = 1000000000;
        int tipo = 0;
        complex<double> pc;
        for (int k = 0; k < n; k++) {
          complex<double> p3 = vec[k];
          if (k != i and k != j and prodvec(p2 - p1, p3 - p1) > error) {
            complex<double> pp, vv;
            ortogonal(p1, p3, pp, vv);
            complex<double> pinter = intersec(p, v, pp, vv);
            if (prodvec(p2 - p1, pinter - p1) < error) continue;
            if (prodvec(p3 - p1, pinter - p1) > error or
                prodvec(p3 - p2, pinter - p2) < -error)
              continue;
            double nextdist = abs(pinter - p1);
            if (prodvec(p3 - p1, pinter - p1) < -error and
                prodvec(p3 - p2, pinter - p2) > error) {
              if (nextdist < dist) {
                dist = nextdist;
                tipo = 0;
                pc = pinter;
              }
              continue;
            }
            if (nextdist < dist - error) {
              dist = nextdist;
              tipo = 1;
              pc = pinter;
            } else if (abs(nextdist - dist) < error) {
              tipo = 0;
            }
          }
        }
        if (dist < 1000000000 - error and tipo == 0) {
          double realdist = dist;
          for (int k = 0; k < n; k++)
            if (k != i and k != j) realdist = min(realdist, abs(vec[k] - pc));
          if (realdist >= dist - error) sol = max(sol, dist);
        }
      }
    }
  }
  if (sol == 0)
    cout << -1 << endl;
  else
    cout << sol << endl;
}
