#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-5;
void getVec(int ax, int ay, int bx, int by, int* vx, int* vy);
double getLen(double ax, double ay, double bx, double by);
double cosFromVec(int v1x, int v1y, int v2x, int v2y);
void getCenter(double ax, double ay, double bx, double by, double cx, double cy,
               double* rx, double* ry);
double getLengthOfEraseHall(int ai, int bi, int ci);
const double PI = 3.14159265258979;
int N;
int xs[100];
int ys[100];
double coss[100][100][100];
int main() {
  istream& in = cin;
  in >> N;
  for (int i = 0; i < N; i++) {
    in >> xs[i] >> ys[i];
  }
  for (int a = 0; a < N; a++)
    for (int b = 0; b < N; b++)
      for (int c = 0; c < N; c++) {
        if (a == b || b == c || c == a) continue;
        int abx, aby, acx, acy;
        getVec(xs[a], ys[a], xs[b], ys[b], &abx, &aby);
        getVec(xs[a], ys[a], xs[c], ys[c], &acx, &acy);
        coss[a][b][c] = cosFromVec(abx, aby, acx, acy);
      }
  double res = 0;
  for (int a = 0; a < N; a++)
    for (int b = a + 1; b < N; b++)
      for (int c = b + 1; c < N; c++) {
        if (coss[a][b][c] > EPS && coss[b][c][a] > EPS && coss[c][a][b] > EPS) {
          res = max(res, getLengthOfEraseHall(a, b, c));
        }
      }
  for (int a = 0; a < N; a++)
    for (int b = 0; b < N; b++)
      for (int c = 0; c < N; c++) {
        if (a == b || b == c || c == a) continue;
        if (abs(coss[a][b][c]) > EPS) continue;
        for (int d = 0; d < N; d++) {
          if (a == d || b == d || c == d) continue;
          if (abs(coss[d][b][c]) <= EPS) {
            double l1 = getLen(xs[a], ys[a], xs[d], ys[d]);
            double l2 = getLen(xs[b], ys[b], xs[c], ys[c]);
            if (abs(l1 - l2) <= EPS) {
              res = max(res, getLengthOfEraseHall(a, b, c));
            }
          }
        }
      }
  if (res == 0) {
    cout << -1 << endl;
  } else {
    printf("%.4lf\n", res);
  }
}
void getVec(int ax, int ay, int bx, int by, int* vx, int* vy) {
  *vx = ax - bx;
  *vy = ay - by;
}
double getLen(double ax, double ay, double bx, double by) {
  double lx = abs(ax - bx);
  double ly = abs(ay - by);
  return sqrt(lx * lx + ly * ly);
}
double cosFromVec(int v1x, int v1y, int v2x, int v2y) {
  double n = v1x * v2x + v1y * v2y;
  double len = getLen(v1x, v1y, 0, 0) * getLen(v2x, v2y, 0, 0);
  return n / len;
}
void getCenter(double ax, double ay, double bx, double by, double cx, double cy,
               double* rx, double* ry) {
  double a = bx - ax;
  double b = by - ay;
  double c = ax * (ax - bx) + ay * (ay - by) -
             ((ax - bx) * (ax - bx) + (ay - by) * (ay - by)) / 2;
  double d = cx - ax;
  double e = cy - ay;
  double f = ax * (ax - cx) + ay * (ay - cy) -
             ((ax - cx) * (ax - cx) + (ay - cy) * (ay - cy)) / 2;
  *rx = (b * f - c * e) / (a * e - b * d);
  *ry = (a * f - c * d) / (b * d - a * e);
}
double getLengthOfEraseHall(int a, int b, int c) {
  double rx, ry;
  getCenter(xs[a], ys[a], xs[b], ys[b], xs[c], ys[c], &rx, &ry);
  double len = getLen(xs[a], ys[a], rx, ry);
  bool ok = true;
  for (int i = 0; i < N; i++) {
    double l = getLen(xs[i], ys[i], rx, ry);
    if (len > l && abs(l - len) > EPS) {
      ok = false;
    }
  }
  return ok ? len : 0;
}
