#include <bits/stdc++.h>
using namespace std;
const double pi = 4 * atan(1);
const double eps = 1e-9;
inline int dcmp(double x) {
  if (fabs(x) < eps)
    return 0;
  else
    return x < 0 ? -1 : 1;
}
inline double getDistance(double x, double y) { return sqrt(x * x + y * y); }
struct Point {
  double x, y;
  Point(double x = 0, double y = 0) : x(x), y(y) {}
  void read() { scanf("%lf%lf", &x, &y); }
  void write() { printf("%lf %lf", x, y); }
  bool operator==(const Point& u) const {
    return dcmp(x - u.x) == 0 && dcmp(y - u.y) == 0;
  }
  bool operator!=(const Point& u) const { return !(*this == u); }
  bool operator<(const Point& u) const {
    return x < u.x || (x == u.x && y < u.y);
  }
  bool operator>(const Point& u) const { return u < *this; }
  bool operator<=(const Point& u) const { return *this < u || *this == u; }
  bool operator>=(const Point& u) const { return *this > u || *this == u; }
  Point operator+(const Point& u) { return Point(x + u.x, y + u.y); }
  Point operator-(const Point& u) { return Point(x - u.x, y - u.y); }
  Point operator*(const double u) { return Point(x * u, y * u); }
  Point operator/(const double u) { return Point(x / u, y / u); }
  double operator*(const Point& u) { return x * u.y - y * u.x; }
};
struct Line {
  double a, b, c;
  Line(double a = 0, double b = 0, double c = 0) : a(a), b(b), c(c) {}
};
struct Circle {
  Point o;
  double r;
  Circle(Point o, double r = 0) : o(o), r(r) {}
  Point point(double rad) {
    return Point(o.x + cos(rad) * r, o.y + sin(rad) * r);
  }
};
namespace Punctual {
double getDistance(Point a, Point b) {
  double x = a.x - b.x, y = a.y - b.y;
  return sqrt(x * x + y * y);
}
};  // namespace Punctual
namespace Vectorial {
double getDot(Point a, Point b) { return a.x * b.x + a.y * b.y; }
double getCross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
double getLength(Point a) { return sqrt(getDot(a, a)); }
double getAngle(Point u) { return atan2(u.y, u.x); }
double getAngle(Point a, Point b) {
  return acos(getDot(a, b) / getLength(a) / getLength(b));
}
Point rotate(Point a, double rad) {
  return Point(a.x * cos(rad) - a.y * sin(rad),
               a.x * sin(rad) + a.y * cos(rad));
}
Point getNormal(Point a) {
  double l = getLength(a);
  return Point(-a.y / l, a.x / l);
}
};  // namespace Vectorial
namespace Linear {
using namespace Vectorial;
Line getLine(double x1, double y1, double x2, double y2) {
  return Line(y2 - y1, x1 - x2, y1 * (x2 - x1) - x1 * (y2 - y1));
}
Line getLine(double a, double b, Point u) {
  return Line(a, -b, u.y * b - u.x * a);
}
bool getIntersection(Line p, Line q, Point& o) {
  if (fabs(p.a * q.b - q.a * p.b) < eps) return false;
  o.x = (q.c * p.b - p.c * q.b) / (p.a * q.b - q.a * p.b);
  o.y = (q.c * p.a - p.c * q.a) / (p.b * q.a - q.b * p.a);
  return true;
}
bool getIntersection(Point p, Point v, Point q, Point w, Point& o) {
  if (dcmp(getCross(v, w)) == 0) return false;
  Point u = p - q;
  double k = getCross(w, u) / getCross(v, w);
  o = p + v * k;
  return true;
}
double getDistanceToLine(Point p, Point a, Point b) {
  return fabs(getCross(b - a, p - a) / getLength(b - a));
}
double getDistanceToSegment(Point p, Point a, Point b) {
  if (a == b) return getLength(p - a);
  Point v1 = b - a, v2 = p - a, v3 = p - b;
  if (dcmp(getDot(v1, v2)) < 0)
    return getLength(v2);
  else if (dcmp(getDot(v1, v3)) > 0)
    return getLength(v3);
  else
    return fabs(getCross(v1, v2) / getLength(v1));
}
Point getPointToLine(Point p, Point a, Point b) {
  Point v = b - a;
  return a + v * (getDot(v, p - a) / getDot(v, v));
}
bool haveIntersection(Point a1, Point a2, Point b1, Point b2) {
  double c1 = getCross(a2 - a1, b1 - a1), c2 = getCross(a2 - a1, b2 - a1),
         c3 = getCross(b2 - b1, a1 - b1), c4 = getCross(b2 - b1, a2 - b1);
  return dcmp(c1) * dcmp(c2) < 0 && dcmp(c3) * dcmp(c4) < 0;
}
bool onSegment(Point p, Point a, Point b) {
  return dcmp(getCross(a - p, b - p)) == 0 && dcmp(getDot(a - p, b - p)) < 0;
}
}  // namespace Linear
using namespace Linear;
double x[2000], y[2000];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%lf%lf", &x[i], &y[i]);
  }
  x[0] = x[n];
  y[0] = y[n];
  x[n + 1] = x[1];
  y[n + 1] = y[1];
  double d = 1e12, xx;
  for (int i = 1; i <= n; i++) {
    xx = getDistanceToLine(Point(x[i], y[i]), Point(x[i - 1], y[i - 1]),
                           Point(x[i + 1], y[i + 1]));
    xx /= 2;
    if (xx < d) d = xx;
  }
  printf("%.10f\n", d);
}
