#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double lb;
const int MAXN = 1e3 + 7;
pair <ll, ll> save[MAXN];
lb ans = 0;
int n;
struct edges{
    int x, y;
    lb w;
};
vector <edges> edge;

struct DSU{
  int par[MAXN];
  DSU(){fill(par + 1, par + 1 + n, -1);}
  int find(int u){return par[u] < 0 ? u : par[u] = find(par[u]);}
  bool join(int x, int y){
    x = find(x);
    y = find(y);
    if(x == y) return false;
    if(par[x] > par[y]) swap(x, y);
    par[x] += par[y];
    par[y] = x;
    return true;
  }
};


int main(){
    ios_base::sync_with_stdio(0);
    cout.tie(0);
    cin.tie(0);
    cout << fixed << setprecision(6);
    cin >> n;
    DSU dsu;
    for(int i = 1; i <= n; i++){
        int x, y;
        cin >> x >> y;
        save[i] = {x, y};
    }
    
    for(int i = 1; i < n; i++){
        for(int j = i + 1; j <= n; j++){
            lb a = abs(save[i].first - save[j].first);
            lb b = abs(save[i].second - save[j].second);
            lb dist = sqrt(a * a + b * b);
            edge.push_back({i, j, dist});
        }
    }
    sort(edge.begin(), edge.end(), [&] (edges a, edges b){
        return a.w < b.w;
    });
    for(auto i : edge){
        int x = i.x;
        int y = i.y;
        lb w = i.w;
        if(dsu.join(x, y))ans = max(ans, w);
    }
    cout << ans / 2;
}