#include <bits/stdc++.h>
#define INF 2000000000
#define MOD 1000000007
#define MAXN 200005
#define REP(temp, init_val, end_val) for (int temp = init_val; temp <= end_val; ++temp)
#define REPR(temp, init_val, end_val) for (int temp = init_val; temp >= end_val; --temp)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> intpair;
int read(){
    int f = 1, x = 0;
    char c = getchar();
    while (c < '0' || c > '9'){if(c == '-') f = -f; c = getchar();}
    while (c >= '0' && c <= '9')x = x * 10 + c - '0', c = getchar();
    return f * x; 
}
inline int lowbit(int x){
    return x & (-x);
}
inline int modadd(int x, int y){
    return (x + y >= MOD ? x + y - MOD: x + y);
}
inline int sgn(int x){
    return (x < 0 ? -1: (x > 0 ? 1: 0));
}
template<typename T>
T gcd(T a, T b){
    return (!b) ? a: gcd(b, a % b);
}
int poww(int a, int b){
    int res = 1;
    while (b > 0){
        if (b & 1) res = 1ll * res * a % MOD;
        a = 1ll * a * a % MOD, b >>= 1;
    }
    return res;
}
const int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
const int ddx[] = {-1, -1, -1, 0, 0, 1, 1, 1}, ddy[] = {-1, 0, 1, -1, 1, -1, 0, 1};

/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/

int n;
double x[105], y[105];
int fa[105], siz[105];
int Find(int x){
    return (x == fa[x] ? x: (fa[x] = Find(fa[x])));
}
void Union(int x, int y){
    x = Find(x), y = Find(y);
    if(x ==y) return;
    if (siz[x] > siz[y]) fa[y] = x, siz[x] += siz[y];
    else fa[x] = y, siz[y] += siz[x];
}
void init(){
    scanf("%d", &n);
    REP(i, 1,n) scanf("%lf%lf", &x[i], &y[i]);
}
bool check(double r){
    REP(i, 1, n + 2) fa[i] = i, siz[i] = 1;
    REP(i, 1, n) if (100.0 - y[i] <= r) Union(n + 1, i);
    REP(i, 1, n) if (y[i] + 100.0 <= r) Union(n + 2, i);
    REP(i, 1, n)
        REP(j, i + 1, n)
            if (hypot(x[i] - x[j], y[i] - y[j]) <= r)
                Union(i, j);
    return Find(n + 1) == Find(n + 2);
}
void solve(){
    double l = 0, r = 200;
    REP(T, 1, 100){
        double mid = (r + l) * 0.5;
        if (check(mid)) r = mid;
        else l = mid;
    }
    printf("%.10lf\n", l * 0.5);
}
int main(){
    int T = 1;
    while (T--){
        init();
        solve();
    }
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define Fast_IO ios::sync_with_stdio(false);
#define DEBUG fprintf(stderr,"Running on Line %d in Function %s\n",__LINE__,__FUNCTION__)
//mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
#define fir first
#define sec second
#define mod 998244353
#define ll long long
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
inline int read()
{
	char ch=getchar(); int nega=1; while(!isdigit(ch)) {if(ch=='-') nega=-1; ch=getchar();}
	int ans=0; while(isdigit(ch)) {ans=ans*10+ch-48;ch=getchar();}
	if(nega==-1) return -ans;
	return ans;
}
typedef pair<int,int> pii;
void print(vector<int> x){for(int i=0;i<(int)x.size();i++) printf("%d%c",x[i]," \n"[i==(int)x.size()-1]);}
inline int add(int x,int y) {return x+y>=mod?x+y-mod:x+y;}
inline int add(int x,int y,int z) {return add(add(x,y),z);}
inline int sub(int x,int y) {return x-y<0?x-y+mod:x-y;}
inline int mul(int x,int y) {return 1LL*x*y%mod;}
inline int mul(int x,int y,int z) {return mul(mul(x,y),z);}
int qpow(int x,int y)
{
	int ans=1;
	while(y)
	{
		if(y&1) ans=mul(ans,x);
		x=mul(x,x);
		y>>=1;
	}
	return ans;
}
int Inv(int x){return qpow(x,mod-2);}

#define N 200005
int a[N],vis[N],n;
int fa[N];
int find(int u) {return fa[u]==u?u:fa[u]=find(fa[u]);}
signed main()
{
	int n=read();
	for(int i=1;i<=n;i++) a[i]=read();
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=n;i++) fa[find(i)]=find(a[i]);
	int cnt=0;
	for(int i=1;i<=n;i++) if(find(i)==i) cnt++;
	cout<<qpow(2,cnt)-1<<endl;
	return 0;
}


