#include <bits/stdc++.h>
using namespace std;
int N;
pair<int, int> P[3030];
pair<double, double> Q[3030];
bool cmp(pair<double, double> first, pair<double, double> b) {
  return first.first < b.first;
}
double adist(double first, double b) {
  double d = max(first - b, b - first);
  return min(d, 2 * (acos(-1.0)) - d);
}
deque<int> D;
int main() {
  cin >> N;
  for (int i = 0; i < N; i++) cin >> P[i].first >> P[i].second;
  double best = 0;
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < i; j++) {
      Q[j].second =
          (sqrt(((P[i].first - P[j].first) * (P[i].first - P[j].first)) +
                ((P[i].second - P[j].second) * (P[i].second - P[j].second))));
      Q[j].first = atan2(P[j].second - P[i].second, P[j].first - P[i].first);
    }
    for (int j = i + 1; j < N; j++) {
      Q[j - 1].second =
          (sqrt(((P[i].first - P[j].first) * (P[i].first - P[j].first)) +
                ((P[i].second - P[j].second) * (P[i].second - P[j].second))));
      Q[j - 1].first =
          atan2(P[j].second - P[i].second, P[j].first - P[i].first);
    }
    sort(Q, Q + N - 1);
    int f = 0, b = 0;
    double t = (acos(-1.0)) / 3.0;
    D.clear();
    while (f < (4 * N + 2) / 3) {
      f++;
      while (adist(Q[f % (N - 1)].first, Q[b % (N - 1)].first) > t) {
        while (!D.empty() &&
               Q[b % (N - 1)].second >= Q[D.front() % (N - 1)].second)
          D.pop_front();
        D.push_front(b);
        b++;
      }
      while (!D.empty() &&
             adist(Q[f % (N - 1)].first, Q[D.back() % (N - 1)].first) < t)
        D.pop_back();
      if (!D.empty())
        best =
            max(best, min(Q[f % (N - 1)].second, Q[D.back() % (N - 1)].second));
    }
  }
  printf("%.9f", best / 2.0);
  return 0;
}
