#include <bits/stdc++.h>
using namespace std;
struct edge {
  int a, b, d;
};
struct CMP {
  bool operator()(edge a, edge b) { return a.d < b.d; }
};
int xs[3000], ys[3000];
bitset<3000> adj[3000];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &xs[i], &ys[i]);
  }
  priority_queue<edge, vector<edge>, CMP> q;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      edge e;
      e.a = i;
      e.b = j;
      e.d =
          (xs[i] - xs[j]) * (xs[i] - xs[j]) + (ys[i] - ys[j]) * (ys[i] - ys[j]);
      q.push(e);
    }
  }
  int ans = -1;
  while (q.size() > 0) {
    edge e = q.top();
    q.pop();
    if ((adj[e.a] & adj[e.b]).any()) {
      ans = e.d;
      goto end;
    }
    adj[e.a][e.b] = 1;
    adj[e.b][e.a] = 1;
  }
end:;
  printf("%.20f\n", sqrt(ans + 0.0) / 2);
  return 0;
}
