#include <bits/stdc++.h>
using namespace std;
const int N = 120, nt = 1, L = 50;
const double inf = 1e100;
const double eps = 1e-6;
const double pi = acos(-1.0);
int n;
double delta, maxv, minv;
struct vpoint {
  double x, y, z, d;
  int id;
} vp[N], test[N];
double dis(vpoint a, vpoint 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)));
}
void calc(vpoint &p) {
  p.d = 0;
  for (int i = 0; i < n; ++i) {
    double t = dis(p, vp[i]);
    if (p.d < t) {
      p.d = t;
      p.id = i;
    }
  }
}
void updata(int id) {
  double d = test[id].d;
  test[id].x += (vp[test[id].id].x - test[id].x) / d * delta;
  test[id].y += (vp[test[id].id].y - test[id].y) / d * delta;
  test[id].z += (vp[test[id].id].z - test[id].z) / d * delta;
  calc(test[id]);
}
void solve() {
  maxv = -inf;
  minv = inf;
  for (int i = 0; i < n; ++i) {
    scanf("%lf%lf%lf", &vp[i].x, &vp[i].y, &vp[i].z);
    if (n == 1) {
      printf("%.12lf %.12lf %.12lf\n", vp[0].x, vp[0].y, vp[0].z);
      return;
    }
    maxv = max(maxv, vp[i].x);
    maxv = max(maxv, vp[i].y);
    minv = min(minv, vp[i].x);
    minv = min(minv, vp[i].y);
  }
  for (int i = 0; i < nt; ++i) {
    test[i].x = minv + (rand() % (int(maxv - minv + 1) * 1000)) / 1000.0;
    test[i].y = minv + (rand() % (int(maxv - minv + 1) * 1000)) / 1000.0;
    test[i].z = minv + (rand() % (int(maxv - minv + 1) * 1000)) / 1000.0;
    calc(test[i]);
  }
  double r = 0.98;
  for (delta = 100000; delta > 1e-8; delta *= r) {
    for (int i = 0; i < nt; ++i)
      for (int j = 0; j < L; ++j) updata(i);
  }
  double res = inf;
  int k = 0;
  for (int i = 0; i < nt; ++i) {
    if (test[i].d < test[k].d) k = i;
  }
  printf("%.7lf %.7lf %.7lf\n", test[k].x + eps, test[k].y + eps,
         test[k].z + eps);
}
int main() {
  while (scanf("%d", &n) == 1) {
    solve();
  }
  return 0;
}
