#include <bits/stdc++.h>
using namespace std;
int const INF = numeric_limits<int>::max();
int const N = 1e3 + 5;
long double const EPS = 1e-9;
int n;
struct point {
  long double x, y;
  point() : x(0), y(0) {}
  point(long double x, long double y) : x(x), y(y) {}
};
point p[N];
long double dist(const point &a, const point &b) {
  return sqrt(pow(a.x - b.x, 2) + pow(a.y - b.y, 2));
}
long double get_len(const point &a) {
  return dist(point(a.x, a.y), point(0, 0));
}
point get_norm(const point &a) {
  double len = get_len(a);
  return point(a.x / len, a.y / len);
}
long double intersec(const point &a, const point &b) {
  return a.x * b.y - a.y * b.x;
}
bool f(long double m) {
  for (int i = 0; i < n; i++) {
    int ind1 = i, ind2 = (i + 1) % n, ind3 = (i + 2) % n;
    point norm = get_norm(point(p[ind3].x - p[ind1].x, p[ind3].y - p[ind1].y));
    norm = point(-norm.y, norm.x);
    point p1 = point(norm.x * m + p[ind1].x, norm.y * m + p[ind1].y),
          p2 = point(p[ind2].x - norm.x * m, p[ind2].y - norm.y * m),
          p3 = point(norm.x * m + p[ind3].x, norm.y * m + p[ind3].y);
    if (intersec(point(p2.x - p1.x, p2.y - p1.y),
                 point(p3.x - p1.x, p3.y - p1.y)) > EPS) {
      return false;
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      if (abs(dist(p[i], p[j]) - m) < EPS) {
        return false;
      }
    }
  }
  return true;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> p[i].x >> p[i].y;
  }
  long double r = 2e9 + 10;
  long double l = 0;
  while (abs(r - l) > EPS) {
    long double m = (l + r) / 2.0;
    if (f(m)) {
      l = m;
    } else {
      r = m;
    }
  }
  cout << fixed << setprecision(10) << r << endl;
  return 0;
}
