#include <bits/stdc++.h>
using namespace std;
const double kEps = 1e-6;
const double kDEps = 0.1;
const double kPi = acos(-1.0);
int x[105], y[105];
struct Line {
  double A, B, C;
};
bool Collinear(int i, int j, int k) {
  return (x[j] - x[i]) * (y[k] - y[i]) == (x[k] - x[i]) * (y[j] - y[i]);
}
double Sqr(double x) { return x * x; }
double Dist(int i, double xx, double yy) {
  return sqrt(Sqr(x[i] - xx) + Sqr(y[i] - yy));
}
double Dist(int i, int j) { return sqrt(Sqr(x[i] - x[j]) + Sqr(y[i] - y[j])); }
double SDist(int i, int j) { return Sqr(x[i] - x[j]) + Sqr(y[i] - y[j]); }
double GetS(double a, double b, double c) {
  double p = (a + b + c) / 2;
  return sqrt(p * (p - a) * (p - b) * (p - c));
}
double Det(double a11, double a12, double a21, double a22) {
  return a11 * a22 - a12 * a21;
}
pair<double, double> Intersect(const Line &f, const Line &s) {
  double zn = Det(f.A, f.B, s.A, s.B);
  double x = -Det(f.C, f.B, s.C, s.B) / zn;
  double y = -Det(f.A, f.C, s.A, s.C) / zn;
  return make_pair(x, y);
}
pair<double, double> GetCenter(int i, int j, int k) {
  Line f, s;
  f.A = x[j] - x[i];
  f.B = y[j] - y[i];
  f.C = -(f.A * (x[i] + x[j]) + f.B * (y[i] + y[j])) / 2;
  s.A = x[k] - x[i];
  s.B = y[k] - y[i];
  s.C = -(s.A * (x[k] + x[i]) + s.B * (y[k] + y[i])) / 2;
  return Intersect(f, s);
}
bool Sharp(int i, int j, int k) {
  double a2 = SDist(i, j), b2 = SDist(i, k), c2 = SDist(j, k);
  return a2 < b2 + c2 && b2 < a2 + c2 && c2 < a2 + b2;
}
struct Segment {
  double l, r;
  bool operator<(const Segment &second) const { return l < second.l; }
};
Segment ang[305];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%d%d", &x[i], &y[i]);
  }
  bool nonc = false;
  for (int i = 2; i < n; ++i) {
    if (!Collinear(0, 1, i)) {
      nonc = true;
      break;
    }
  }
  if (!nonc) {
    puts("-1");
    return 0;
  }
  double ans = -1;
  for (int i = 0; i < n; ++i) {
    for (int j = i + 1; j < n; ++j) {
      for (int k = j + 1; k < n; ++k) {
        if (!Collinear(i, j, k)) {
          pair<double, double> c = GetCenter(i, j, k);
          double t = Dist(i, c.first, c.second);
          bool bad = false;
          int at = 0;
          double delta = (kPi - acos(1 - kDEps * kDEps / (2 * t * t))) / 2.0;
          for (int l = 0; l < n; ++l) {
            if (Dist(l, c.first, c.second) + kEps < t) {
              bad = true;
              break;
            }
            if (Dist(l, c.first, c.second) <= t + kEps) {
              ang[at].l = atan2(c.second - y[l], c.first - x[l]) - delta;
              ang[at].r = atan2(c.second - y[l], c.first - x[l]) + delta;
              if (ang[at].r > kPi) {
                ang[at + 1].l = -kPi;
                ang[at + 1].r = ang[at].r - 2 * kPi;
                ang[at].r = kPi;
                ++at;
                swap(ang[at], ang[at - 1]);
              }
              if (ang[at].l < -kPi) {
                ang[at + 1].l = 2 * kPi + ang[at].l;
                ang[at + 1].r = kPi;
                ang[at].l = -kPi;
                ++at;
                swap(ang[at], ang[at - 1]);
              }
              ++at;
            }
          }
          sort(ang, ang + at);
          double prv = -kPi;
          for (int i = 0; i < at; ++i) {
            if (prv + kEps < ang[i].l) {
              bad = true;
              break;
            }
            prv = max(prv, ang[i].r);
          }
          if (prv + kEps < kPi) {
            bad = true;
          }
          if (!bad) {
            ans = max(ans, t);
          }
        }
      }
    }
  }
  if (ans > -0.5) {
    printf("%.10lf\n", ans);
  } else {
    puts("-1");
  }
  return 0;
}
