/*
LA3890 Most Distant Point from the Sea
题意：大海中央有一个凸n边形的小岛，求岛上离海最远的点，输出其距离
思路：
	二分答案，对于小岛的每条边，作一条相应的直线，若最后形成的半平面非空，
	那么可以满足。 
*/
#include <bits/stdc++.h>
using namespace std;
const double eps=1e-6;
const double PI=acos(-1);

struct Point		//定义点or向量 
{
	double x,y;
	Point ( double x=0,double y=0 ) : x(x),y(y) {}
};
typedef Point Vector;		//区分点和向量，因为结构体一样 

Vector operator + ( Vector A,Vector B )
{
	return Vector( A.x+B.x,A.y+B.y );
} 

Vector operator - ( Point A,Point B )
{
	return Vector( A.x-B.x,A.y-B.y );
}

Vector operator * ( Vector A,double b )
{
	return Vector( A.x*b,A.y*b );
}

Vector operator / ( Vector A,double b )
{
	return Vector( A.x/b,A.y/b );
}

bool operator < ( const Point &a,const Point &b )
{
	return a.x<b.x || ( a.x==b.x && a.y<b.y );
}

int dcmp( double x )
{
	if ( fabs( x )<eps ) return 0;
	else return x<0 ? -1 : 1;
}

bool operator == ( const Point &a,const Point &b )
{
	return dcmp( a.x-b.x )==0 && dcmp( a.y-b.y )==0;
}

double Dot( Vector A,Vector B )		//求点积 
{
	return A.x*B.x+A.y*B.y;
}

double Length( Vector A )		//求向量的模 
{
	return sqrt( Dot( A,A ) );
}

double Cross( Vector A,Vector B )		//根据向量求叉积 
{
	return A.x*B.y-A.y*B.x;
}

Vector Normal( Vector A )		//左转九十度长度归一，注意不能是零向量
{
	double l=Length( A );
	return Vector( -A.y/l,A.x/l );
}

struct Line2		//有向直线
{
	Point P; Vector v; double ang;
	Line2() {}
	Line2( Point P,Vector v ) :P(P),v(v) {ang=atan2( v.y,v.x );}
	bool operator <( const Line2 &L ) const
	{
		return ang<L.ang;
	}
};

bool Onleft( Line2 L,Point p )		//点p在有向直线左边 
{
	return Cross( L.v,p-L.P ) >0;
}

Point GetLineIntersection( Line2 a,Line2 b )		//两直线交点 
{
	Vector u=a.P-b.P;
	double t=Cross( b.v,u )/Cross( a.v,b.v );
	return a.P+a.v*t;
}

int HalfPlaneIntersection( Line2 *L,int n,Point *poly )
{
	sort( L,L+n );
	int first,last; Point *p=new Point[n]; Line2 *q=new Line2[n];
	q[first=last=0]=L[0];
	for ( int i=1; i<n; i++ )
	{
		while ( first<last && !Onleft( L[i],p[last-1] ) ) last--;
		while ( first<last && !Onleft( L[i],p[first] ) ) first++;
		q[++last]=L[i];
		if ( fabs( Cross( q[last].v,q[last-1].v ) )<eps )
		{
			last--;
			if ( Onleft( q[last],L[i].P ) ) q[last]=L[i];
		}
		if ( first<last ) p[last-1]=GetLineIntersection( q[last-1],q[last] );
	}
	while (first<last && !Onleft( q[first],p[last-1] ) ) last--;
	if ( last-first<=1 ) return 0;
	p[last]=GetLineIntersection( q[last],q[first] );
	int m=0;
	for ( int i=first; i<=last; i++ )
		poly[m++]=p[i];
	return m;
}

Point p[210],poly[210];
Vector v[210],v2[210];
Line2 L[210];
int n;

int main()
{
	while ( scanf( "%d",&n ) && n )
	{
		int m;
		for ( int i=0,x,y; i<n; i++ )
		{
			scanf( "%d%d",&x,&y ); p[i]=Point( x,y );
		}
		
		for ( int i=0; i<n; i++ )
			v[i]=p[(i+1)%n]-p[i],v2[i]=Normal( v[i] );
		double left=0,right=20010;
		while ( dcmp( right-left) )
		{
			double mid=(left+right)/2;
			for ( int i=0; i<n; i++ )
				L[i]=Line2( p[i]+v2[i]*mid,v[i] );
			m=HalfPlaneIntersection( L,n,poly );
			if ( !m ) right=mid;
			else left=mid;
		}
		
		printf( "%.6lf\n",left );
	}
}
