#include <bits/stdc++.h>
using namespace std;
const int Maxn = 3000 + 10;
struct Point {
  int x, y;
  Point operator+(const Point &A) { return (Point){x + A.x, y + A.y}; }
  Point operator-(const Point &A) { return (Point){x - A.x, y - A.y}; }
} P[Maxn];
int CalDJ(Point A, Point B) { return A.x * B.x + A.y * B.y; }
int CalLen2(Point A) { return CalDJ(A, A); }
int n, u[Maxn * Maxn], v[Maxn * Maxn], w[Maxn * Maxn], m, c[Maxn * Maxn];
bitset<Maxn> S[Maxn], T;
int cmp(int a, int b) { return w[a] > w[b]; }
void solve() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d%d", &P[i].x, &P[i].y);
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++) {
      u[++m] = i;
      v[m] = j;
      w[m] = CalLen2(P[i] - P[j]);
    }
  for (int i = 1; i <= m; i++) c[i] = i;
  sort(c + 1, c + 1 + m, cmp);
  for (int i = 1; i <= m; i++) {
    int e = c[i], x = u[e], y = v[e];
    T = S[x] & S[y];
    if (T.any()) {
      double ans = sqrt((double)w[e]) / 2.0;
      printf("%f\n", ans);
      return;
    }
    S[x].set(y);
    S[y].set(x);
  }
}
int main() {
  solve();
  return 0;
}
