#include <bits/stdc++.h>
using namespace std;
void err(istream_iterator<string> it) {}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << "\n";
  err(++it, args...);
}
const double PI = acos(-1);
const double eps = (1e-9);
const long long int INF = 1e18;
const int M = (1e9) + 7;
const int N = 200000;
struct Point {
  int x, y;
  Point(int a = 0, int b = 0) { x = a, y = b; }
  void reassign(int a, int b) { x = a, y = b; }
  void input() { scanf("%d%d", &x, &y); }
  void print() { printf("%d %d\n", x, y); }
  Point operator+=(Point &A) {
    x += A.x, y += A.y;
    return *this;
  }
  Point operator-=(Point &A) {
    x -= A.x, y -= A.y;
    return *this;
  }
  Point operator+(Point &A) {
    Point tp(x + A.x, y + A.y);
    return tp;
  }
  Point operator-(Point &A) {
    Point tp(x - A.x, y - A.y);
    return tp;
  }
  Point operator*=(int f) {
    x *= f, y *= f;
    return *this;
  }
  Point operator/=(int f) {
    x /= f, y /= f;
    return *this;
  }
  bool operator==(Point &A) {
    if (x == A.x && y == A.y) return true;
    return false;
  }
  bool operator!=(Point &A) {
    if (x != A.x || y != A.y) return true;
    return false;
  }
  void ulta() { swap(x, y); }
};
Point makepoint(int a, int b) {
  Point temp(a, b);
  return temp;
}
void swap(Point &A, Point &B) {
  swap(A.x, B.x);
  swap(A.y, B.y);
}
bool cmp(Point &a, Point &b) {
  if (a.x != b.x) return (a.x < b.x);
  return (a.y < b.y);
}
long long int dotproduct(Point a, Point b) {
  return (long long int)a.x * (long long int)b.x +
         (long long int)a.y * (long long int)b.y;
}
long long int crossproduct(Point a, Point b) {
  return (long long int)a.x * (long long int)b.y -
         (long long int)a.y * (long long int)b.x;
}
int ccw(Point a, Point b, Point origin = makepoint(0, 0)) {
  long long int x = crossproduct(a - origin, b - origin);
  if (x > 0) x = 1;
  if (x < 0) x = -1;
  return (int)x;
}
long long int sqrdis(Point a, Point b = makepoint(0, 0)) {
  long long int q = 0, temp;
  temp = a.x - b.x;
  temp *= temp, q += temp;
  temp = a.y - b.y;
  temp *= temp, q += temp;
  return q;
}
double dist(Point a, Point b = makepoint(0, 0)) {
  long long int temp = sqrdis(a, b);
  return sqrt(temp);
}
double norm(Point &a) {
  long long int temp = sqrdis(a);
  double d = sqrt(temp);
  return d;
}
double anglepolar(Point &a) { return atan2(a.y, a.x); }
double anglebetween(Point &a, Point &b, Point origin = makepoint(0, 0)) {
  return atan2(crossproduct(a - origin, b - origin),
               dotproduct(a - origin, b - origin));
}
Point perp(Point &a) { return makepoint(-a.y, a.x); }
pair<double, double> bisector(Point a, Point b) {
  double da, db;
  da = norm(a);
  db = norm(b);
  double p = 0, q = 0;
  p = da * b.x + db * a.x;
  q = da * b.y + db * a.y;
  return {p, q};
}
struct Line {
  Point a, b, ab;
  bool isline;
  Line() {
    a = makepoint(0, 0);
    b = a, ab = a, isline = 0;
  }
  Line(Point &p, Point &q) {
    a = p, b = q;
    ab = b - a;
    if (a != b)
      isline = 1;
    else
      isline = 0;
  }
  void update(Point &p, Point &q) {
    a = p, b = q;
    ab = b - a;
    if (a != b)
      isline = 1;
    else
      isline = 0;
    return;
  }
  bool online(Point &point) {
    if (!isline) return (point == a);
    return (crossproduct(point - a, ab) == 0);
  }
  bool operator==(Line &other) {
    return ((crossproduct(ab, other.ab) == 0) && online(other.a));
  }
  bool onsegment(Point &point) {
    if (!isline) return (point == a);
    Point va, vb;
    va = a - point, vb = b - point;
    return (crossproduct(va, vb) == 0 && dotproduct(va, vb) <= 0);
  }
  bool parallel(Line &other) { return (crossproduct(ab, other.ab) == 0); }
  bool perpendicular(Line &other) { return (dotproduct(ab, other.ab) == 0); }
  double distline(Point &point) {
    if (!isline) return sqrt(sqrdis(a, point));
    long double t = abs(crossproduct(point - a, ab));
    t /= norm(ab);
    return t;
  }
  double distsegment(Point &point) {
    if (dotproduct(point - a, ab) <= 0) return dist(a, point);
    if (dotproduct(point - b, ab) >= 0) return dist(b, point);
    return distline(point);
  }
};
int main() {
  int i, n, a, b;
  scanf("%d", &n);
  vector<Point> v(n);
  for (i = 0; i < n; ++i) v[i].input();
  double d = INF;
  v.emplace_back(v[0]), v.emplace_back(v[1]);
  Line ray;
  cout << setprecision(10) << fixed;
  for (i = 1; i < n + 1; ++i) {
    ray.update(v[i - 1], v[i + 1]);
    d = min(d, ray.distline(v[i]));
  }
  d /= 2;
  cout << d << "\n";
}
