#include <bits/stdc++.h>
using namespace std;
struct POINT {
  double x;
  double y;
  POINT(double a = 0, double b = 0) {
    x = a;
    y = b;
  }
} a[2000];
struct LINESEG {
  POINT s;
  POINT e;
  LINESEG(POINT a, POINT b) {
    s = a;
    e = b;
  }
  LINESEG() {}
};
struct LINE {
  double a;
  double b;
  double c;
  LINE(double d1 = 1, double d2 = -1, double d3 = 0) {
    a = d1;
    b = d2;
    c = d3;
  }
};
double multiply(POINT sp, POINT ep, POINT op) {
  return ((sp.x - op.x) * (ep.y - op.y) - (ep.x - op.x) * (sp.y - op.y));
}
double dist(POINT p1, POINT p2) {
  return (sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)));
}
double ptoldist(POINT p, LINESEG l) {
  return abs(multiply(p, l.e, l.s)) / dist(l.s, l.e);
}
int check(double d, int n) {
  int flag = 0;
  for (int i = 0; i < n; i++) {
    int l = (i - 1 + n) % n + 1;
    int r = (i + 1) % n + 1;
    int now = i + 1;
    LINESEG tmp = LINESEG(a[l], a[r]);
    double dis = ptoldist(a[now], tmp);
    flag += (dis < 2 * d);
  }
  return !flag;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%lf%lf", &a[i].x, &a[i].y);
  double ans = 1e12;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (i == j) continue;
      ans = min(ans, dist(a[i], a[j]) / 2);
    }
  }
  double l = 0, r = ans;
  for (int i = 1; i <= 100; i++) {
    double mid = (l + r) / 2;
    if (check(mid, n))
      l = mid;
    else
      r = mid;
  }
  printf("%.10lf", l);
  return 0;
}
