#include <bits/stdc++.h>
using namespace std;
const int N = 1000;
struct point {
  double x, y;
  point(double x, double y) {
    this->x = x;
    this->y = y;
  }
};
struct vec {
  double x, y;
  vec(double x, double y) {
    this->x = x;
    this->y = y;
  }
  vec(point a, point b) {
    this->x = b.x - a.x;
    this->y = b.y - a.y;
  }
};
double dot(vec a, vec b) { return a.x * b.x + a.y * b.y; }
double norm_sq(vec a) { return a.x * a.x + a.y * a.y; }
double dist(point a, point b) { return hypot(a.x - b.x, a.y - b.y); }
vec scale(vec v, double s) { return vec(v.x * s, v.y * s); }
point translate(point p, vec v) { return point(p.x + v.x, p.y + v.y); }
double distToLine(point p, point a, point b) {
  vec ap = vec(a, p);
  vec ab = vec(a, b);
  double u = dot(ap, ab) / norm_sq(ab);
  point c = translate(a, scale(ab, u));
  return dist(p, c);
}
int n;
vector<point> p;
int main() {
  std::ios::sync_with_stdio(false);
  scanf("%d", &n);
  double x, y;
  for (int i = 0; i < n; i++) {
    scanf("%lf%lf", &x, &y);
    p.push_back(point(x, y));
  }
  p.push_back(p[0]);
  double ans = 1e20;
  for (int i = 1; i < n; i++) {
    point a = p[i - 1], b = p[i + 1], c = p[i];
    ans = min(ans, distToLine(c, a, b) * 0.5);
  }
  point a = p[n - 1], b = p[1], c = p[0];
  ans = min(ans, distToLine(c, a, b) * 0.5);
  printf("%.8f\n", ans);
  return 0;
}
