/*...................................................................*
 *............___..................___.....____...______......___....*
 *.../|....../...\........./|...../...\...|.............|..../...\...*
 *../.|...../.....\......./.|....|.....|..|.............|.../........*
 *....|....|.......|...../..|....|.....|..|............/...|.........*
 *....|....|.......|..../...|.....\___/...|___......../....|..___....*
 *....|....|.......|.../....|...../...\.......\....../.....|./...\...*
 *....|....|.......|../_____|__..|.....|.......|..../......|/.....\..*
 *....|.....\...../.........|....|.....|.......|.../........\...../..*
 *..__|__....\___/..........|.....\___/...\___/.../..........\___/...*
 *...................................................................*
 */
 
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INF 1000000000000000000

bool cmp1(const pair<pair<int,int>,int> &a, const pair<pair<int,int>,int> &b)
{
    return a.first.first<b.first.first;
}

bool cmp2(const pair<pair<int,int>,int> &a, const pair<pair<int,int>,int> &b)
{
    return a.first.second<b.first.second;
}

int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int tt=1;
    //cin >> tt;
    while(tt--)
    {
        int n;
        cin >> n;
        pair<pair<int,int>,int> p[n];
        for(int i=0;i<n;i++)
        {
            cin >> p[i].first.first >> p[i].first.second;
            p[i].second = i;
        }
        sort(p,p+n,cmp1);
        map<pair<int,int>,int> marked;
        vector<int> t;
        if(marked[{p[0].second,p[n-1].second}]==0)
        {
            t.push_back(max(abs(p[0].first.first-p[n-1].first.first),abs(p[0].first.second-p[n-1].first.second)));
            marked[{p[0].second,p[n-1].second}]++;
        }
        if(marked[{p[0].second,p[n-2].second}]==0)
        {
            t.push_back(max(abs(p[0].first.first-p[n-2].first.first),abs(p[0].first.second-p[n-2].first.second)));
            marked[{p[0].second,p[n-2].second}]++;
        }
        if(marked[{p[1].second,p[n-1].second}]==0)
        {
            t.push_back(max(abs(p[1].first.first-p[n-1].first.first),abs(p[1].first.second-p[n-1].first.second)));
            marked[{p[1].second,p[n-1].second}]++;
        }
        sort(p,p+n,cmp2);
        if(marked[{p[0].second,p[n-1].second}]==0)
        {
            t.push_back(max(abs(p[0].first.first-p[n-1].first.first),abs(p[0].first.second-p[n-1].first.second)));
            marked[{p[0].second,p[n-1].second}]++;
        }
        if(marked[{p[0].second,p[n-2].second}]==0)
        {
            t.push_back(max(abs(p[0].first.first-p[n-2].first.first),abs(p[0].first.second-p[n-2].first.second)));
            marked[{p[0].second,p[n-2].second}]++;
        }
        if(marked[{p[1].second,p[n-1].second}]==0)
        {
            t.push_back(max(abs(p[1].first.first-p[n-1].first.first),abs(p[1].first.second-p[n-1].first.second)));
            marked[{p[1].second,p[n-1].second}]++;
        }
        sort(t.begin(),t.end());
        cout << t[t.size()-2] << '\n';
    }
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,dsu[110],cnt;
int find(int x){return dsu[x]==x?x:dsu[x]=find(dsu[x]);}
void merge(int x,int y){dsu[find(x)]=find(y);}
pair<double,pair<int,int> >e[20100];
pair<int,int>p[110];
int main(){
	scanf("%d",&n);
	for(int i=0;i<=n+1;i++)dsu[i]=i;
	for(int i=1;i<=n;i++)scanf("%d%d",&p[i].first,&p[i].second),e[++cnt]=make_pair(100-p[i].second,make_pair(0,i)),e[++cnt]=make_pair(p[i].second+100,make_pair(i,n+1));
	for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)e[++cnt]=make_pair(sqrt((p[i].first-p[j].first)*(p[i].first-p[j].first)+(p[i].second-p[j].second)*(p[i].second-p[j].second)),make_pair(i,j));
	sort(e+1,e+cnt+1);
	for(int i=1;i<=cnt;i++){merge(e[i].second.first,e[i].second.second);if(find(0)==find(n+1)){printf("%lf\n",e[i].first/2);return 0;}}
	return 0;
}