#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,popcnt,tune=native")
using namespace std;
const int MN = 3333, inf = 1000000005, mod = 1000000007;
const long long INF = 1000000000000000005LL;
bitset<MN> Z[MN];
int dist[MN][MN], X[MN], Y[MN];
inline int d2(int a, int b) {
  return (X[a] - X[b]) * (X[a] - X[b]) + (Y[a] - Y[b]) * (Y[a] - Y[b]);
}
int n;
bool dasie(int x) {
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j) Z[i][j] = (i != j && dist[i][j] >= x);
  for (int i = 1; i <= n; ++i)
    for (int j = i + 1; j <= n; ++j) {
      if (Z[i][j] == 0) continue;
      if ((Z[i] & Z[j]).count()) return true;
    }
  return false;
}
int bs() {
  int zd = 0, zg = 1e9 + 5;
  while (zd != zg) {
    int mid = (zd + zg + 1) >> 1;
    if (dasie(mid))
      zd = mid;
    else
      zg = mid - 1;
  }
  return zd;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d%d", &X[i], &Y[i]);
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j) dist[i][j] = d2(i, j);
  int ans = bs();
  double odp = ans;
  odp = sqrt(odp) / 2.0;
  printf("%.9lf", odp);
}
