#include <bits/stdc++.h>
using namespace std;
int N;
pair<int, int> P[3030];
pair<double, double> Q[3030];
inline double adist(double a, double b) {
  double d = max(a - b, b - a);
  return min(d, 2 * (acos(-1.0)) - 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].first =
          -(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].second = atan2(P[j].second - P[i].second, P[j].first - P[i].first);
    }
    for (int j = i + 1; j < N; j++) {
      Q[j - 1].first =
          -(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].second =
          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;
    if (adist(Q[0].second, Q[1].second) > t)
      best = max(best, -Q[1].first);
    else {
      double left = Q[0].second;
      double right = Q[1].second;
      for (int j = 2; j < N - 1; j++) {
        double L = adist(left, Q[j].second);
        double R = adist(right, Q[j].second);
        double S = adist(left, right);
        if (L > t || R > t) {
          best = max(best, -Q[j].first);
          break;
        }
        if (-1e-8 <= L + R - S && L + R - S <= 1e-8) continue;
        if (L > R)
          right = Q[j].second;
        else
          left = Q[j].second;
      }
    }
  }
  printf("%.9f", best / 2.0);
  return 0;
}
