#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y;
} arr[3005];
double angle[3005];
double dis[3005][3005];
struct vec {
  int i, j;
  double len;
  vec(int st, int ed) {
    i = arr[ed].x - arr[st].x;
    j = arr[ed].y - arr[st].y;
    len = dis[st][ed];
  }
};
inline int dot(vec a, vec b) { return a.i * b.i + a.j * b.j; }
inline int cross(vec a, vec b) { return a.i * b.j - a.j * b.i; }
inline double cal_cos(vec a, vec b) {
  return (double)dot(a, b) / a.len / b.len;
}
int deq[3005 << 1];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> arr[i].x >> arr[i].y;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      int a = arr[i].x - arr[j].x, b = arr[i].y - arr[j].y;
      dis[i][j] = sqrt(a * a + b * b);
    }
  double ans = 0;
  const double PI = acos(-1.0);
  const double ban = cos(PI / 3.0);
  for (int ref = 1; ref <= n; ref++) {
    vector<int> idxs;
    for (int i = 1; i <= n; i++)
      if (i != ref) idxs.emplace_back(i);
    arr[n + 1] = arr[ref];
    arr[n + 1].x += 87;
    dis[ref][n + 1] = dis[n + 1][ref] = 87;
    for (int idx : idxs) {
      angle[idx] = acos(cal_cos(vec(ref, n + 1), vec(ref, idx)));
      if (arr[idx].y < arr[ref].y) angle[idx] = 2.0 * PI - angle[idx];
    }
    sort(idxs.begin(), idxs.end(),
         [=](int a, int b) -> bool { return angle[a] < angle[b]; });
    int l = 0, r = 0, idx = 0, sz = n - 1;
    for (int p : idxs) {
      if (l == r) idx = (idx + 1) % sz;
      while (idxs[idx] != p && cross(vec(ref, p), vec(ref, idxs[idx])) >= 0) {
        while (l < r && dis[ref][deq[r - 1]] < dis[ref][idxs[idx]]) r--;
        deq[r++] = idxs[idx];
        idx = (idx + 1) % sz;
      }
      while (l < r && cal_cos(vec(ref, p), vec(ref, deq[l])) > ban) l++;
      if (l < r) ans = max(ans, min(dis[ref][deq[l]], dis[ref][p]));
    }
  }
  cout << fixed << setprecision(7) << ans / 2.0 << endl;
  return 0;
}
