#include <bits/stdc++.h>
using namespace std;
pair<int, int> first[3100], X[3100], H[3100];
int D[3100 * 3100];
int dst[3100][3100];
inline int dist(pair<int, int> A, pair<int, int> B) {
  return (A.first - B.first) * (A.first - B.first) +
         (A.second - B.second) * (A.second - B.second);
}
inline int ccw(pair<int, int> A, pair<int, int> B, pair<int, int> C) {
  return (B.first - A.first) * (C.second - B.second) -
         (B.second - A.second) * (C.first - B.first);
}
int N;
inline int comp(pair<int, int> A, pair<int, int> B) {
  if (ccw(X[1], A, B) == 0) return dist(X[1], A) < dist(X[1], B);
  return ccw(X[1], A, B) > 0;
}
void makeHull() {
  for (int i = 1; i <= N; ++i)
    if (X[i].second < X[1].second ||
        (X[i].second == X[1].second && X[i].first < X[1].first))
      swap(X[1], X[i]);
  sort(X + 2, X + N + 1, comp);
  for (int i = 1; i <= 2; ++i) H[i] = X[i];
  int hCnt = 2, cur = 3;
  while (cur <= N) {
    if (ccw(H[hCnt - 1], H[hCnt], X[cur]) >= 0)
      H[++hCnt] = X[cur], ++cur;
    else
      --hCnt;
  }
  N = hCnt;
}
int next(int first) { return first == N ? 1 : (first + 1); }
inline bool possible(int n, int minDist) {
  for (int i = 1; i <= n; ++i) {
    N = 0;
    for (int j = 1; j <= n; ++j)
      if (dst[i][j] >= minDist) X[++N] = first[j];
    if (N < 2) continue;
    makeHull();
    int maxDist = 0;
    int idx2 = 1;
    for (int idx1 = 1; idx1 <= N; ++idx1) {
      for (; dist(H[idx1], H[idx2]) < dist(H[idx1], H[next(idx2)]);
           idx2 = next(idx2))
        ;
      maxDist =
          (maxDist > dist(H[idx1], H[idx2]) ? maxDist : dist(H[idx1], H[idx2]));
    }
    if (maxDist > minDist) return true;
  }
  return false;
}
int main() {
  int(n);
  scanf("%d", &(n));
  for (int i = 1; i <= n; ++i) scanf("%d%d", &first[i].first, &first[i].second);
  int cntD = 0;
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j) {
      dst[i][j] = dist(first[i], first[j]);
      if (i < j) D[++cntD] = dist(first[i], first[j]);
    }
  sort(D + 1, D + cntD + 1);
  int left = 1, right = cntD, med;
  double ret;
  while (left <= right) {
    int med = (left + right) / 2;
    if (possible(n, D[med])) {
      ret = D[med];
      left = med + 1;
    } else
      right = med - 1;
  }
  printf("%.10lf", sqrt((double)ret) * 0.5);
  return 0;
}
