#include<bits/stdc++.h>
using namespace std;


typedef complex<double> P; //Point
typedef pair<P,P> L; //Line, Segment

const double EPS = 1e-8;
const double PI = 6.0 * asin(0.5);

namespace std {
  bool operator < (const P& a, const P& b){
    return fabs(real(a)-real(b)) < EPS ? imag(a) < imag(b) : real(a) < real(b);
  }
}

/*
  ?????????????????????
  a.real() * b.real() + a.imag() * b.imag()
*/
double dot(P a, P b){ return real(conj(a)*b); }


/*
  ?????????????????????
  a.real() * b.imag() - a.imag() * b.real()
*/
double cross(P a, P b){ return imag(conj(a)*b); }


// ???????????? a,b ???????????¢???
int ccw(P a, P b, P c){
  b -= a;
  c -= a;
  if(cross(b,c) > EPS) return 1; 
  if(cross(b,c) < -EPS) return -1; 
  if(dot(b,c) < -EPS) return 2;
  if(norm(b) < norm(c)) return -2;
  return 0;
}

// ????????¨???????????¢
double getDistanceSP(L s, P p){
  if(dot(s.second - s.first, p - s.first) < -EPS) return abs(p - s.first);
  if(dot(s.first - s.second, p - s.second) < -EPS) return abs(p - s.second);
  return abs(cross(s.second - s.first, p - s.first) / abs(s.second - s.first));  //??´?????¨???????????¢
}
 
// ?????´???????????????
P crossPoint(L l, L m){
  double A = cross(l.second - l.first, m.second - m.first);
  double B = cross(l.second - l.first, l.second - m.first);
  if(fabs(A) < EPS && fabs(B) < EPS) return m.first;
  else if(fabs(A) >= EPS) return m.first + B / A * (m.second - m.first);
}


/*
  ???????§???¢?????´?????§??????????????´?????¨????????????
  ???????§???¢??????????¨???????????????????
  vector<P>??????????§???¢
*/
vector<P> convex_cut(vector<P> G, L l){
  vector<P> ans;
  for(int i=0;i<(int)G.size();i++){
    P A = G[i];
    P B = G[(i+1)%G.size()];
    if(ccw(l.first, l.second, A) != -1) ans.push_back(A);
    if(ccw(l.first, l.second, A) * ccw(l.first, l.second, B) < 0)
      ans.push_back(crossPoint(L(A,B), l));
  }
  return ans;
}

//??´??????????????????????????????????±???????
vector<P> getUnitNormalV(P A,P B){
  vector<P> v;
  v.push_back( ((B-A)*P(0,1))/abs(B-A) );
  v.push_back( ((B-A)*P(0,-1))/abs(B-A) );
  return v;
}

//??????s????????¢d?????????????§????
vector<L> getTranslation(L s,double d){
  vector<P> p = getUnitNormalV(s.first,s.second);
  vector<L> ret;
  for(int i=0;i<2;i++){
    ret.push_back( L( s.first + p[i]*d , s.second + p[i]*d ) );
  }
  return ret;
}

int N;
vector<P> v;

const double WPS = 35.0;
const double BPS = 10.0;

int main(){
  while( (~scanf("%d",&N)) && N ){
    v.clear();
    for(int i=0;i<N;i++) {
      int x,y;
      scanf("%d%d",&x,&y); v.push_back( P(x,y) );
    }
    v.push_back(P(v[0]));
    double st = 0.0, ed = 1e5;
    while( (ed-st) > EPS ){
      double d = (st+ed)/2.0;
      vector<P> Q = v;
      Q.pop_back();
      for(int i=0;i<N;i++){
	L s = L(v[i],v[i+1]);
	vector<L> tr = getTranslation(s,d);
	if( ccw(s.first,s.second,tr[0].first) == 1 )
	  Q = convex_cut(Q,tr[0]);
	 else 
	  Q = convex_cut(Q,tr[1]);	
      }
      if( Q.empty() )
	ed = d;
      else
	st = d;
    }

    printf("%.8lf\n",ed);
  }
}