#include <bits/stdc++.h>
typedef long long LL;
#define lowbit(x) (x & (-x))

const LL inf  = 1e17+9;
const LL mod  = 1e9+7;
const LL maxn = 2e2+8;

LL n, m, fa[maxn];
double x[maxn], y[maxn], hi[maxn], lo[maxn];

LL find(LL u) {
    if (fa[u] == u) return u;
    return fa[u] = find(fa[u]);
}

void solve() {
    LL i, j;
    double h = 100, l = 0, mid;
    scanf("%lld", &n);
    for (i = 1; i <= n; i++) scanf("%lf%lf", &x[i], &y[i]);
    while (l < h) {
        mid = (h + l) / 2;
        for (i = 1; i <= n; i++) {
            fa[i] = i; hi[i] = y[i]; lo[i] = y[i];
        }
        for (i = 1; i <= n; i++) {
            for (j = i + 1; j <= n; j++) {
                if ((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]) < 4 * mid * mid) {
                    LL fi = find(i), fj = find(j);
                    fa[fj] = fi;
                    hi[fi] = std::max(hi[fi], hi[fj]);
                    lo[fi] = std::min(lo[fi], lo[fj]);
                }
            }
            if (100.0 - hi[find(i)] < 2.0 * mid && lo[find(i)] + 100.0 < 2.0 * mid) break;
        }
        if (i <= n) h = mid - 1e-6;
        else l = mid + 1e-6;
    }
    printf("%.10lf\n", h);
}

signed main() {
    LL t = 1; // scanf("%lld", &t);
    while (t--) solve();
    return 0;
}


#include <bits/stdc++.h>

#define rep(i,n) for(int i=0;i<(n);i++)

using namespace std;

class union_find{
	int n;
	vector<int> p;
public:
	union_find(int n):n(n),p(n,-1){}
	int find(int u){ return p[u]<0?u:p[u]=find(p[u]); }
	void unite(int u,int v){
		u=find(u); v=find(v);
		if(u!=v){
			if(p[v]<p[u]) swap(u,v);
			p[u]+=p[v]; p[v]=u; n--;
		}
	}
	bool is_same(int u,int v){ return find(u)==find(v); }
	int size()const{ return n; }
	int size(int u){ return -p[find(u)]; }
};

struct edge{
	int u,v,cost;
	edge(){}
	edge(int u,int v,int cost):u(u),v(v),cost(cost){}
	bool operator<(const edge& e)const{ return cost<e.cost; }
};

int main(){
	int n; scanf("%d",&n);
	vector<int> x(n),y(n);
	rep(i,n) scanf("%d%d",&x[i],&y[i]);

	int s=n,t=n+1;
	vector<edge> E;
	rep(i,n) for(int j=i+1;j<n;j++) {
		E.emplace_back(i,j,(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
	}
	rep(i,n){
		E.emplace_back(s,i,(100-y[i])*(100-y[i]));
		E.emplace_back(i,t,(y[i]+100)*(y[i]+100));
	}

	sort(E.begin(),E.end());

	union_find U(n+2);
	for(auto e:E){
		U.unite(e.u,e.v);
		if(U.is_same(s,t)){
			printf("%.9f\n",sqrt(e.cost)/2);
			break;
		}
	}

	return 0;
}
