#include <bits/stdc++.h>
int x[3000], y[3000];
struct point {
  int dist;
  double ang;
  inline bool operator<(const point &a) const { return ang < a.ang; }
} a[3000];
int n, k, best, st, dr, poz, dq[2 * 3000];
const double PI = acos(-1);
const double ang = PI / 3;
inline double dif(double x, double y) {
  if (x - y > -0.0000000000001)
    return x - y;
  else
    return x - y + 2 * PI;
}
inline void hai() {
  for (int i = 1; i <= k; i++) {
    while (st < dr && dif(a[dq[st]].ang, a[i].ang) + 0.0000000000001 < ang)
      st++;
    while (dif(a[i].ang, a[poz].ang) - 0.0000000000001 > ang) {
      while (st < dr && a[poz].dist >= a[dq[dr - 1]].dist) dr--;
      dq[dr++] = poz;
      poz++;
      if (poz > k) poz = 1;
    }
    while (st < dr && dif(a[dq[st]].ang, a[i].ang) + 0.0000000000001 < ang)
      st++;
    if (st < dr) best = std::max(best, std::min(a[dq[st]].dist, a[i].dist));
  }
}
inline int alg(int p) {
  k = 0;
  for (int i = 0; i < n; i++)
    if (i != p) {
      k++;
      a[k].dist = (x[i] - x[p]) * (x[i] - x[p]) + (y[i] - y[p]) * (y[i] - y[p]);
      a[k].ang = atan2(y[i] - y[p], x[i] - x[p]);
    }
  std::sort(a + 1, a + k + 1);
  best = 0;
  st = dr = 0;
  poz = 1;
  hai();
  hai();
  return best;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d%d", &x[i], &y[i]);
  int ans = 0;
  for (int i = 0; i < n; i++) ans = std::max(ans, alg(i));
  printf("%.15f\n", sqrt(ans) * 0.5);
  return 0;
}
