#include <bits/stdc++.h>
using namespace std;
int n;
long long int x[1010], y[1010];
struct point {
  double x, y;
  point(double x_, double y_) {
    x = x_;
    y = y_;
  }
};
double hypot(double a, double b) { return sqrt(a * a + b * b); }
double dist(point p1, point p2) { return hypot(p1.x - p2.x, p1.y - p2.y); }
double distToLine(point p, point A, point B, point *c) {
  double scale =
      (double)((p.x - A.x) * (B.x - A.x) + (p.y - A.y) * (B.y - A.y)) /
      ((B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y));
  c->x = A.x + scale * (B.x - A.x);
  c->y = A.y + scale * (B.y - A.y);
  return dist(p, *c);
}
int main() {
  while (scanf("%d", &n) != EOF) {
    vector<point> pts;
    for (int i = 0; i < n; i++) {
      scanf("%lld %lld", &x[i], &y[i]);
      pts.push_back(point(x[i], y[i]));
    }
    double ans = 1000000000000000000;
    for (int i = 0; i < n; i++) {
      int p1 = i, p2 = (i + 1) % n, p3 = (i + 2) % n;
      point c(0, 0);
      ans = min(ans, distToLine(pts[p1], pts[p2], pts[p3], &c));
      ans = min(ans, distToLine(pts[p2], pts[p3], pts[p1], &c));
      ans = min(ans, distToLine(pts[p3], pts[p1], pts[p2], &c));
    }
    printf("%.10lf\n", ans / 2.0);
  }
  return 0;
}
