#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;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxiOwpjb25zdCBpbnQgTUFYTiA9IDFlMyArIDc7CnBhaXIgPGxsLCBsbD4gc2F2ZVtNQVhOXTsKbGIgYW5zID0gMDsKaW50IG47CnN0cnVjdCBlZGdlc3sKICAgIGludCB4LCB5OwogICAgbGIgdzsKfTsKdmVjdG9yIDxlZGdlcz4gZWRnZTsKCnN0cnVjdCBEU1V7CiAgaW50IHBhcltNQVhOXTsKICBEU1UoKXtmaWxsKHBhciArIDEsIHBhciArIDEgKyBuLCAtMSk7fQogIGludCBmaW5kKGludCB1KXtyZXR1cm4gcGFyW3VdIDwgMCA/IHUgOiBwYXJbdV0gPSBmaW5kKHBhclt1XSk7fQogIGJvb2wgam9pbihpbnQgeCwgaW50IHkpewogICAgeCA9IGZpbmQoeCk7CiAgICB5ID0gZmluZCh5KTsKICAgIGlmKHggPT0geSkgcmV0dXJuIGZhbHNlOwogICAgaWYocGFyW3hdID4gcGFyW3ldKSBzd2FwKHgsIHkpOwogICAgcGFyW3hdICs9IHBhclt5XTsKICAgIHBhclt5XSA9IHg7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn07CgoKaW50IG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbig2KTsKICAgIGNpbiA+PiBuOwogICAgRFNVIGRzdTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBjaW4gPj4geCA+PiB5OwogICAgICAgIHNhdmVbaV0gPSB7eCwgeX07CiAgICB9CiAgICAKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBuOyBpKyspewogICAgICAgIGZvcihpbnQgaiA9IGkgKyAxOyBqIDw9IG47IGorKyl7CiAgICAgICAgICAgIGxiIGEgPSBhYnMoc2F2ZVtpXS5maXJzdCAtIHNhdmVbal0uZmlyc3QpOwogICAgICAgICAgICBsYiBiID0gYWJzKHNhdmVbaV0uc2Vjb25kIC0gc2F2ZVtqXS5zZWNvbmQpOwogICAgICAgICAgICBsYiBkaXN0ID0gc3FydChhICogYSArIGIgKiBiKTsKICAgICAgICAgICAgZWRnZS5wdXNoX2JhY2soe2ksIGosIGRpc3R9KTsKICAgICAgICB9CiAgICB9CiAgICBzb3J0KGVkZ2UuYmVnaW4oKSwgZWRnZS5lbmQoKSwgWyZdIChlZGdlcyBhLCBlZGdlcyBiKXsKICAgICAgICByZXR1cm4gYS53IDwgYi53OwogICAgfSk7CiAgICBmb3IoYXV0byBpIDogZWRnZSl7CiAgICAgICAgaW50IHggPSBpLng7CiAgICAgICAgaW50IHkgPSBpLnk7CiAgICAgICAgbGIgdyA9IGkudzsKICAgICAgICBpZihkc3Uuam9pbih4LCB5KSlhbnMgPSBtYXgoYW5zLCB3KTsKICAgIH0KICAgIGNvdXQgPDwgYW5zIC8gMjsKfQ==