#include <bits/stdc++.h>
using namespace std;
struct rmq {
  int r[8192 * 2 + 10];
  double x[8192 * 2 + 10];
  int y[8192 * 2 + 10];
  void stab(int i) {
    if (x[i * 2] < x[i * 2 + 1]) {
      r[i] = r[i * 2];
      x[i] = x[i * 2];
      y[i] = y[i * 2];
    } else {
      r[i] = r[i * 2 + 1];
      x[i] = x[i * 2 + 1];
      y[i] = y[i * 2 + 1];
    }
  }
  void init() {
    for (int i = 8192; i < 8192 * 2; i++) {
      r[i] = i - 8192;
      x[i] = 1000000.0L;
    }
    for (int i = 8192 - 1; i >= 1; i--) {
      stab(i);
    }
  }
  void insert(int d, double l, int f) {
    if (x[8192 + d] > l) {
      x[8192 + d] = l;
      y[8192 + d] = f;
      d = (8192 + d) / 2;
      while (d >= 1) {
        stab(d);
        d /= 2;
      }
    }
  }
  void get_min(int &d, double &l, int &f) {
    d = r[1];
    l = x[1];
    f = y[1];
    x[8192 + d] = 1000000.0L;
    int i = (8192 + d) / 2;
    while (i >= 1) {
      stab(i);
      i /= 2;
    }
  }
};
rmq s;
struct dot {
  double x, y, z;
};
double length(dot a, dot b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y) +
              (a.z - b.z) * (a.z - b.z));
}
int n;
dot a[5010];
double len[5010][5010];
int p[5010];
double w[5010];
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    p[i] = -1;
    scanf("%lf %lf %lf", &a[i].x, &a[i].y, &a[i].z);
  }
  for (int i = 0; i < n; i++) {
    for (int j = i; j < n; j++) {
      len[i][j] = len[j][i] = length(a[i], a[j]);
    }
  }
  p[0] = 0;
  w[0] = 0;
  for (int i = 1; i < n; i++) {
    w[i] = len[0][i];
    p[i] = 0;
  }
  double ans = 0;
  bool f = false;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      if (p[i] != j && p[j] != i) {
        int x = i;
        int y = j;
        if (w[x] > w[y]) {
          swap(x, y);
        }
        if (w[x] + len[x][y] > w[y]) {
          if (f) {
            ans = min(ans, w[x] + fabs(w[y] - w[x]) +
                               (len[x][y] - fabs(w[y] - w[x])) / 2);
          } else {
            ans =
                w[x] + fabs(w[y] - w[x]) + (len[x][y] - fabs(w[y] - w[x])) / 2;
            f = true;
          }
        }
      }
    }
  }
  printf("%.8lf\n", ans);
  return 0;
}
