#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, y;
  Point() {}
  Point(double _x, double _y) {
    x = _x;
    y = _y;
  }
  Point operator+(const Point& other) const {
    return Point(x + other.x, y + other.y);
  }
  Point operator-(const Point& other) const {
    return Point(x - other.x, y - other.y);
  }
  double operator^(const Point& other) const {
    return x * other.y - y * other.x;
  }
  double operator*(const Point& other) const {
    return x * other.x + y * other.y;
  }
  double operator~() const { return x * x + y * y; }
  double distanceToSegment2(const Point s1, const Point s2) const {
    Point c = *this;
    if (((s2 - s1) * (c - s1)) <= 0.0 || ((s1 - s2) * (c - s2)) <= 0.0) {
      return min(~(s1 - c), ~(s2 - c));
    } else {
      double area = (s2 - s1) ^ (c - s1);
      return (area * area) / (~(s2 - s1));
    }
  }
};
struct Line {
  double a, b, c;
  Line() {}
  Line(double _a, double _b, double _c) {
    a = _a;
    b = _b;
    c = _c;
  }
  bool parallel(const Line& other) { return (a * other.b == other.a * b); }
  Point intersect(const Line& other) {
    if (this->parallel(other))
      return Point(-HUGE_VAL, -HUGE_VAL);
    else {
      double det = a * other.b - other.a * b;
      double x = (b * other.c - other.b * c) / det;
      double y = (c * other.a - other.c * a) / det;
      return Point(x, y);
    }
  }
  Line perpendicular(Point p) { return Line(-b, a, b * p.x - a * p.y); }
};
const int MAXN = 2123;
int n;
Point v[MAXN];
int main() {
  cin >> n;
  double ans = HUGE_VAL;
  for (int i = 0; i < n; ++i) scanf("%lf %lf", &v[i].x, &v[i].y);
  for (int i = 0; i < n; ++i)
    ans = min(ans, v[i].distanceToSegment2(v[(i - 1 + n) % n], v[(i + 1) % n]));
  if (ans < 0) ans = 0;
  cout << fixed << setprecision(12) << sqrt(ans) / 2.0 << endl;
  return 0;
}
