#include <bits/stdc++.h>
using namespace std;
void solutionB();
int main() {
  ios_base::sync_with_stdio(false);
  solutionB();
  return EXIT_SUCCESS;
}
long long n;
struct point {
  double x, y;
  point(double x = 0, double y = 0) : x(x), y(y) {}
} p[1024];
inline double dist(const point& a, const point& b) {
  double dx = a.x - b.x, dy = a.y - b.y;
  return sqrt(dx * dx + dy * dy);
}
inline double length(const point& p) { return sqrt(p.x * p.x + p.y * p.y); }
inline point normalize(const point& p) {
  double len = length(p);
  assert(len > 1e-9);
  return point(p.x / len, p.y / len);
}
point operator-(const point& a, const point& b) {
  return point(a.x - b.x, a.y - b.y);
}
point operator+(const point& a, const point& b) {
  return point(a.x + b.x, a.y + b.y);
}
point operator*(const point& p, float k) { return point(p.x * k, p.y * k); }
inline double cross(const point& a, const point& b) {
  return a.x * b.y - a.y * b.x;
}
void solve() {
  double r = dist(p[0], p[1]);
  double l = 0.0;
  for (long long i = 0; i < n; ++i) r = min(r, dist(p[i], p[(i + 1) % n]));
  r -= 2 * 1e-9;
  for (long long it = 0; it < 80; ++it) {
    double mid = (l + r) / 2.0;
    bool good = true;
    for (long long i = 0; i < n; ++i) {
      long long i1 = i, i2 = (i + 1) % n, i3 = (i + 2) % n;
      point normal = normalize(p[i3] - p[i1]);
      normal = point(-normal.y, normal.x);
      point p1 = p[i1] + normal * mid;
      point p2 = p[i2] - normal * mid;
      point p3 = p[i3] + normal * mid;
      if (cross(p2 - p1, p3 - p1) > 1e-9) good = false;
    }
    for (long long i = 0; i < n; ++i)
      for (long long j = i + 1; j < n; ++j) {
        double d = dist(p[i], p[j]);
        if (d - 2.0 * mid < 1e-9) good = false;
      }
    if (good)
      l = mid;
    else
      r = mid;
  }
  cout << fixed << setprecision(9) << r << '\n';
}
void solutionB() {
  for (; cin >> n;) {
    for (long long i = 0; i < n; ++i) cin >> p[i].x >> p[i].y;
    solve();
    cerr << endl;
  }
}
