#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
  point() {}
  point(double a, double b) {
    x = a;
    y = b;
  }
};
struct answer {
  int x, y, z;
  double dd;
  point center;
  answer(int a, int b, int c, double d, point ce) {
    x = a;
    y = b;
    z = c;
    dd = d;
    center = ce;
  }
  friend bool operator<(answer a, answer b) { return a.dd > b.dd; }
};
double dist(point a, point b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
point weixin(point a, point b, point c) {
  double A1 = 2 * (b.x - a.x);
  double A2 = 2 * (c.x - b.x);
  double B1 = 2 * (b.y - a.y);
  double B2 = 2 * (c.y - b.y);
  double C1 = b.x * b.x + b.y * b.y - a.x * a.x - a.y * a.y;
  double C2 = c.x * c.x + c.y * c.y - b.x * b.x - b.y * b.y;
  double x = ((C1 * B2) - (C2 * B1)) / ((A1 * B2) - (A2 * B1));
  double y = ((A1 * C2) - (A2 * C1)) / ((A1 * B2) - (A2 * B1));
  return point(x, y);
}
int diancheng(point a, point b, point c) {
  return (b.x - a.x) * (c.x - a.x) + (b.y - a.y) * (c.y - a.y);
}
bool judgerui(point a, point b, point c) {
  if (diancheng(a, b, c) > 0 && diancheng(b, a, c) > 0 &&
      diancheng(c, a, b) > 0) {
    return true;
  }
  return false;
}
bool judgezhi(point a, point b, point c) {
  if (diancheng(a, b, c) == 0 || diancheng(b, a, c) == 0 ||
      diancheng(c, a, b) == 0) {
    return true;
  }
  return false;
}
int main() {
  int n;
  while (cin >> n) {
    vector<point> pc;
    vector<answer> ar, az;
    for (int i = 0; i < n; i++) {
      double x, y;
      cin >> x >> y;
      pc.push_back(point(x, y));
    }
    if (n < 3) {
      printf("-1\n");
      continue;
    }
    for (int i = 0; i < pc.size() - 2; i++) {
      for (int j = i + 1; j < pc.size(); j++) {
        for (int k = j + 1; k < pc.size(); k++) {
          if (judgerui(pc[i], pc[j], pc[k])) {
            point wxin = weixin(pc[i], pc[j], pc[k]);
            double d = dist(wxin, pc[i]);
            ar.push_back(answer(i, j, k, d, wxin));
          } else if (judgezhi(pc[i], pc[j], pc[k])) {
            point wxin = weixin(pc[i], pc[j], pc[k]);
            double d = dist(wxin, pc[i]);
            az.push_back(answer(i, j, k, d, wxin));
          }
        }
      }
    }
    for (int i = 0; i < az.size(); i++) {
      for (int j = 0; j < pc.size(); j++) {
        if (j != az[i].x && j != az[i].y && j != az[i].z) {
          if (dist(pc[j], az[i].center) == az[i].dd) {
            ar.push_back(az[i]);
          }
        }
      }
    }
    sort(ar.begin(), ar.end());
    if (ar.size() == 0) {
      printf("-1\n");
    }
    bool bo;
    for (int i = 0; i < ar.size(); i++) {
      bo = 0;
      for (int j = 0; j < pc.size(); j++) {
        if (j != ar[i].x && j != ar[i].y && j != ar[i].z) {
          if (dist(pc[j], ar[i].center) < ar[i].dd) {
            bo = 1;
            break;
          }
        }
      }
      if (bo == 0) {
        printf("%.6lf\n", sqrt(ar[i].dd));
        break;
      }
    }
    if (bo == 1) {
      printf("-1\n");
    }
  }
  return 0;
}
