#include <bits/stdc++.h>
using namespace std;
struct Point {
  long double x, y;
  Point(long double x, long double y) : x(x), y(y) {}
};
long double dist(Point a, Point b) {
  return sqrt((long double)(a.x - b.x) * (long double)(a.x - b.x) +
              (long double)(a.y - b.y) * (long double)(a.y - b.y));
}
long double dist_to_line(Point a, Point b, Point c) {
  long double d1 = dist(a, b);
  long double d2 = dist(a, c);
  long double d3 = dist(b, c);
  long double p = (d1 + d2 + d3) / 2;
  long double s = sqrt(p * (p - d1) * (p - d2) * (p - d3));
  return 2 * s / d1;
}
int main() {
  int n;
  cin >> n;
  long double ans = 1e18;
  vector<Point> pts;
  for (int i = 0; i < n; ++i) {
    long double x, y;
    cin >> x >> y;
    Point p(x, y);
    pts.push_back(p);
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 1; j < n; ++j) {
      if (j != i && j - 1 != i) {
        ans = min(ans, dist_to_line(pts[j - 1], pts[j], pts[i]) / 2);
      }
    }
    if (i != 0 && i != n - 1) {
      ans = min(ans, dist_to_line(pts[0], pts[n - 1], pts[i]) / 2);
    }
    if (i == 0) {
      ans = min(ans, dist_to_line(pts[n - 1], pts[1], pts[i]) / 2);
    } else if (i == n - 1) {
      ans = min(ans, dist_to_line(pts[0], pts[n - 2], pts[i]) / 2);
    } else {
      ans = min(ans, dist_to_line(pts[i - 1], pts[i + 1], pts[i]) / 2);
    }
  }
  cout.precision(30);
  cout << fixed;
  cout << ans << endl;
  return 0;
}
