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

const long long MaxN = 1e3 + 5;

long long n;
pair<long long,long long> pr[MaxN];

vector<long long> arr[MaxN];
bool visited[MaxN];

void bfs(long long x, vector<long long> arr[], bool visited[])
{
    queue<long long> q;

    q.push(x);
    visited[x]=true;

    while(!q.empty())
    {
        long long u=q.front();
        q.pop();

        for(long long v:arr[u])
        {
            if(!visited[v])
            {
                visited[v]=true;
                q.push(v);
            }
        }
    }
}

bool check(long double R)
{
    for(long long i=1;i<=n;i++)
    {
        arr[i].clear();
        visited[i]=false;
    }

    for(long long i=1;i<=n;i++)
    {
        for(long long j=i+1;j<=n;j++)
        {
            long long dx=pr[i].first-pr[j].first;
            long long dy=pr[i].second-pr[j].second;

            long long dis2=dx*dx+dy*dy;

            if((long double)dis2 <= 4*R*R)
            {
                arr[i].push_back(j);
                arr[j].push_back(i);
            }
        }
    }

    bfs(1,arr,visited);

    for(long long i=1;i<=n;i++)
    {
        if(!visited[i])
        {
            return false;
        }
    }

    return true;
}

void input()
{
    cin>>n;

    for(long long i=1;i<=n;i++)
    {
        cin>>pr[i].first>>pr[i].second;
    }
}

void solve()
{
    double l=0;
    double r=1e9+5;

    for(long long it=1;it<=60;it++)
    {
        double mid=(l+r)/2;

        if(check(mid))
        {
            r=mid;
        }
        else
        {
            l=mid;
        }
    }

    cout<<fixed<<setprecision(6)<<r;
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    input();
    solve();
}