#include <bits/stdc++.h>
#define REP(i, a, n) for (ll i = ((ll) a); i < ((ll) n); i++)
using namespace std;
typedef long long ll;

class Vector2 {
public:
  double x, y;

  Vector2(): x(0), y(0) {}
  Vector2(double x, double y): x(x), y(y) {}

  Vector2 operator+(Vector2 p) { return Vector2(x + p.x, y + p.y); }
  Vector2 operator-(Vector2 p) { return Vector2(x - p.x, y - p.y); }
  Vector2 operator*(double t) { return Vector2(x * t, y * t); }
  Vector2 operator/(double t) { return Vector2(x / t, y / t); }
  double dot(Vector2 p) { return x * p.x + y * p.y; }
  double det(Vector2 p) { return x * p.y - y * p.x; }
  double norm2() { return x * x + y * y; }
  double norm() { return sqrt(norm2()); }
  Vector2 normalize() { return Vector2(x / norm(), y / norm()); }
};
using Point2 = Vector2;

class LineSegment2 {
public:
  Point2 p1, p2;

  LineSegment2() {}
  LineSegment2(Point2 p1, Point2 p2): p1(p1), p2(p2) {}
};

using Polygon2 = vector<Vector2>;

Point2 lines_intersect_point(Point2 a, Point2 b, Point2 c, Point2 d) {
  Vector2 u = b - a;
  Vector2 v = d - c;
  double p1 = u.y, q1 = -u.x, r1 = -u.det(a);
  double p2 = v.y, q2 = -v.x, r2 = -v.det(c);
  double det = p1 * q2 - p2 * q1;
  double x = (r1 * q2 - r2 * q1) / det;
  double y = (r2 * p1 - r1 * p2) / det;
  return Point2(x, y);
}

LineSegment2 slide(LineSegment2 l, double d) {
  Vector2 v = (l.p2 - l.p1).normalize();
  Vector2 n = Vector2(-v.y, v.x);
  Vector2 m = (l.p1 + l.p2) / 2;
  Vector2 p1 = m + n * d;
  Vector2 p2 = p1 + v;
  return LineSegment2(p1, p2);
}

Polygon2 cut(Polygon2 &P, LineSegment2 l) {
  Polygon2 poly;
  REP(i, 0, P.size()) {
    Point2 p1 = P[i], p2 = P[(i + 1) % P.size()];
    if ((l.p2 - l.p1).det(p1 - l.p1) >= 0) {
      poly.push_back(p1);
    }
    if ((l.p2 - l.p1).det(p1 - l.p1) * (l.p2 - l.p1).det(p2 - l.p1) < 0) {
      poly.push_back(lines_intersect_point(l.p1, l.p2, p1, p2));
    }
  }
  return poly;
}

bool ok(Polygon2 &P, double d) {
  Polygon2 poly(P);
  REP(i, 0, P.size()) {
    Vector2 p1 = P[i], p2 = P[(i + 1) % P.size()];
    LineSegment2 l = slide(LineSegment2(p1, p2), d);
    poly = cut(poly, l);
  }
  return poly.size() > 0;
}

double solve(Polygon2 P) {
  double l = 0, h = 1e10;
  REP(i, 0, 100) {
    double m = (l + h) / 2;
    if (ok(P, m)) l = m;
    else h = m;
  }
  return l;
}

int main(void) {
  for (ll N; cin >> N, N;) {
    Polygon2 P(N);
    REP(i, 0, N) cin >> P[i].x >> P[i].y;
    printf("%.15lf\n", solve(P));
  }
}
