#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
int sqr(int x) { return x * x; }
struct point {
  int x, y;
  point(int _x = 0, int _y = 0) {
    x = _x;
    y = _y;
  }
  friend int scan(point &t) { return scanf("%d%d", &t.x, &t.y); }
  friend int dis2(point p, point q) { return sqr(p.x - q.x) + sqr(p.y - q.y); }
};
struct node {
  int i, j, w;
  node(int _i = 0, int _j = 0, int _w = 0) {
    i = _i;
    j = _j;
    w = _w;
  }
  bool operator<(const node &t) const { return w > t.w; }
};
point p[3100];
vector<int> a[3100];
vector<node> t;
bool vis[3100][3100];
int main() {
  int N, i, j, k;
  cin >> N;
  for (i = 1; i <= N; i++) {
    scan(p[i]);
  }
  int M = 0;
  for (i = 1; i <= N; i++) {
    for (j = i + 1; j <= N; j++) {
      t.push_back(node(i, j, dis2(p[i], p[j])));
    }
  }
  sort(t.begin(), t.end());
  vector<node>::iterator ii;
  vector<int>::iterator jj;
  for (ii = t.begin(); ii != t.end(); ii++) {
    i = ii->i;
    j = ii->j;
    vis[i][j] = vis[j][i] = 1;
    for (jj = a[i].begin(); jj != a[i].end(); jj++) {
      k = *jj;
      if (vis[j][k]) {
        printf("%.20f\n", sqrt(ii->w) / 2);
        return 0;
      }
    }
    a[i].push_back(j);
    a[j].push_back(i);
  }
}
