#include <bits/stdc++.h>
using namespace std;
const bool JUDGE = true, STRESS = false;
const int INF = 2e9 + 29;
const long long LINF = 2e18 + 18;
int cnt_tests = 1;
struct Point {
  long long x, y;
  Point() {}
  Point(long long xx, long long yy) {
    x = xx;
    y = yy;
  }
};
struct Vector {
  long long x, y;
  Vector() {}
  Vector(long long xx, long long yy) {
    x = xx;
    y = yy;
  }
  Vector(Point a, Point b) {
    x = (b.x - a.x);
    y = (b.y - a.y);
  }
};
double dist(Point a, Point b) {
  return sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y));
}
long long pscal(Vector a, Vector b) { return a.x * b.y - a.y * b.x; }
int n;
vector<Point> pts;
void inp() {
  cin >> n;
  pts.resize(n);
  long long x, y;
  for (int i = 0; i < n; i++) {
    cin >> pts[i].x >> pts[i].y;
  }
}
void solve() {
  double ans = (double)LINF;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      double val = dist(pts[i], pts[j]);
      ans = min(ans, val / 2.0);
    }
  }
  for (int i = 0; i < n; i++) {
    int Fi = i;
    int Se = (i + 1) % n;
    int Th = (i + 2) % n;
    double val =
        double(abs(pscal(Vector(pts[Fi], pts[Se]), Vector(pts[Fi], pts[Th])))) /
        dist(pts[Fi], pts[Th]);
    ans = min(ans, val / 2.0);
  }
  cout.precision(9);
  cout << ans << '\n';
}
void run() {
  if (STRESS) {
    cout << "STRESS\n";
  } else {
    inp();
    solve();
  }
  cout << '\n';
}
int main() {
  if (JUDGE) {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
  } else {
    freopen("input.txt", "r", stdin);
  }
  for (int i = 0; i < cnt_tests; i++) {
    run();
  }
}
