#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const long long LLINF = 9223372036854775807LL;
const int maxn = 3010;
pair<int, int> a[maxn];
double dist(int i1, int i2) {
  return (a[i1].first - a[i2].first) * (a[i1].first - a[i2].first) +
         (a[i1].second - a[i2].second) * (a[i1].second - a[i2].second) + .0;
}
bitset<maxn> b[maxn];
int n;
bool can() {
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < i; ++j)
      if (b[i][j] && (b[i] & b[j]).count()) return true;
  return false;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) scanf("%d%d", &a[i].first, &a[i].second);
  vector<pair<double, pair<int, int> > > vd;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < i; ++j)
      vd.push_back(make_pair(dist(i, j), make_pair(i, j)));
  sort(vd.begin(), vd.end());
  reverse(vd.begin(), vd.end());
  for (int i = 0; i < int((vd).size()); ++i) {
    int ci = vd[i].second.first;
    int cj = vd[i].second.second;
    b[ci][cj] = b[cj][ci] = 1;
    if ((b[ci] & b[cj]).count()) {
      double ans = sqrt(vd[i].first);
      printf("%.15lf\n", ans / 2.);
      exit(0);
    }
  }
  return 0;
  double l = 0;
  double r = 1e5;
  for (int iter = 0; iter < 35; ++iter) {
    double m = (l + r) * .5;
    for (int i = 0; i < n; ++i)
      for (int j = 0; j < n; ++j)
        if (i != j && dist(i, j) >= m * m)
          b[i][j] = 1;
        else
          b[i][j] = 0;
    if (can())
      l = m;
    else
      r = m;
  }
  printf("%.15lf\n", l / 2);
  return 0;
}
