#include <bits/stdc++.h>
using namespace std;
template <typename S, typename T>
ostream &operator<<(ostream &os, pair<S, T> p) {
  return os << "(" << p.first << "," << p.second << ")";
};
double dis(const complex<double> &a, const complex<double> &b) {
  return hypot(a.real() - b.real(), a.imag() - b.imag());
}
int main(int argc, char *argv[]) {
  int N;
  scanf("%d", &N);
  vector<complex<double> > p;
  for (int n_ = (N), i = 0; i < n_; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    p.push_back(complex<double>(x, y));
  }
  vector<pair<double, pair<int, int> > > d;
  for (int n_ = (N), i = 0; i < n_; ++i)
    for (int n_ = (i), j = 0; j < n_; ++j) {
      d.push_back(make_pair(dis(p[i], p[j]), make_pair(i, j)));
    }
  sort((d).begin(), (d).end());
  bitset<3000> bs[N];
  for (int i = (int)d.size() - 1; i >= 0; i--) {
    int a = d[i].second.first, b = d[i].second.second;
    if (!(bs[a] & bs[b]).none()) {
      printf("%.10lf", d[i].first * .5);
      break;
    }
    bs[a][b] = 1;
    bs[b][a] = 1;
  }
  return 0;
}
