#include <bits/stdc++.h>
using namespace std;
double EPS = 1e-12;
struct point {
  double x, y;
  point(double xp = 0.0, double yp = 0.0) {
    x = xp;
    y = yp;
  }
  point(const point &p) {
    x = p.x;
    y = p.y;
  }
  point operator+(const point &p) const { return point(x + p.x, y + p.y); }
  point operator-(const point &p) const { return point(x - p.x, y - p.y); }
  point operator*(double c) { return point(c * x, c * y); }
  point operator/(double c) { return point(x / c, y / c); }
};
double dot(point p, point q) { return p.x * q.x + p.y * q.y; }
double dist(point p, point q) { return sqrt(dot(p - q, p - q)); }
double cross(point p, point q) { return p.x * q.y - p.y * q.x; }
point projectInLine(point c, point a, point b) {
  return a + (b - a) * dot(c - a, b - a) / dot(b - a, b - a);
}
point projectInSegment(point c, point a, point b) {
  point lineP = projectInLine(c, a, b);
  double maxDist = max(dist(a, lineP), dist(b, lineP));
  if (maxDist > dist(a, b)) {
    if (dist(a, c) > dist(b, c))
      return b;
    else
      return a;
  } else
    return lineP;
}
int main() {
  vector<point> v;
  int n;
  scanf("%d", &n);
  double resp = 1e10;
  for (int i = 0; i < n; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    v.push_back(point(a, b));
  }
  v.push_back(v[0]);
  v.push_back(v[1]);
  for (int i = 1; i <= n; i++) {
    resp = min(resp, dist(v[i], projectInLine(v[i], v[i - 1], v[i + 1])) / 2.0);
  }
  printf("%lf\n", resp);
  return 0;
}
