#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double inf = 1e100;
const double eps = 1e-8;
int sgn(double d) {
  if (fabs(d) < eps) return 0;
  if (d > 0) return 1;
  return -1;
}
struct Point {
  double x, y;
  Point(double x = 0, double y = 0) : x(x), y(y) {}
};
typedef Point Vector;
Vector operator+(Vector A, Vector B) { return Vector(A.x + B.x, A.y + B.y); }
Vector operator-(Point A, Point B) { return Vector(A.x - B.x, A.y - B.y); }
Vector operator*(Vector A, double p) { return Vector(A.x * p, A.y * p); }
Vector operator/(Vector A, double p) { return Vector(A.x / p, A.y / p); }
bool operator<(const Point &a, const Point &b) {
  if (a.x == b.x) return a.y < b.y;
  return a.x < b.x;
}
bool operator==(const Point &a, const Point &b) {
  if (sgn(a.x - b.x) == 0 && sgn(a.y - b.y) == 0) return true;
  return false;
}
double Dot(Vector A, Vector B) { return A.x * B.x + A.y * B.y; }
double Length(Vector A) { return sqrt(Dot(A, A)); }
double Angle(Vector A, Vector B) {
  return acos(Dot(A, B) / Length(A) / Length(B));
}
double Cross(Vector A, Vector B) { return A.x * B.y - A.y * B.x; }
double DistanceToLine(Point P, Point A, Point B) {
  Vector v1 = B - A;
  Vector v2 = P - A;
  return fabs(Cross(v1, v2) / Length(v1));
}
Point inputs[1005];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%lf%lf", &inputs[i].x, &inputs[i].y);
  }
  double ans = 1e18;
  for (int i = 0; i < n; i++) {
    ans = min(ans, DistanceToLine(inputs[i], inputs[(i - 1 + n) % n],
                                  inputs[(i + 1) % n]));
  }
  printf("%.10f\n", ans / 2);
  return 0;
}
