#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 100;
const int CNT = 60;
const double LINF = 1e60;
double xs[MAX_N], ys[MAX_N], zs[MAX_N];
double minx, maxx, miny, maxy, minz, maxz;
inline void setmin(double &a, double b) {
  if (a > b) a = b;
}
inline void setmax(double &a, double b) {
  if (a < b) a = b;
}
double d2max(int n, double x, double y, double z) {
  double maxd2 = 0.0;
  for (int i = 0; i < n; i++) {
    double dx = x - xs[i], dy = y - ys[i], dz = z - zs[i];
    setmax(maxd2, dx * dx + dy * dy + dz * dz);
  }
  return maxd2;
}
double calcz(int n, double x, double y, double &z) {
  double lz = minz, rz = maxz;
  for (int cnt = 0; cnt < CNT; cnt++) {
    double z0 = (lz * 2 + rz) / 3;
    double z1 = (lz + rz * 2) / 3;
    if (d2max(n, x, y, z0) >= d2max(n, x, y, z1))
      lz = z0;
    else
      rz = z1;
  }
  z = lz;
  return d2max(n, x, y, z);
}
double calcyz(int n, double x, double &y, double &z) {
  double ly = miny, ry = maxy;
  for (int cnt = 0; cnt < CNT; cnt++) {
    double y0 = (ly * 2 + ry) / 3;
    double y1 = (ly + ry * 2) / 3;
    if (calcz(n, x, y0, z) >= calcz(n, x, y1, z))
      ly = y0;
    else
      ry = y1;
  }
  y = ly;
  return calcz(n, x, y, z);
}
double calcxyz(int n, double &x, double &y, double &z) {
  double lx = minx, rx = maxx;
  for (int cnt = 0; cnt < CNT; cnt++) {
    double x0 = (lx * 2 + rx) / 3;
    double x1 = (lx + rx * 2) / 3;
    if (calcyz(n, x0, y, z) >= calcyz(n, x1, y, z))
      lx = x0;
    else
      rx = x1;
  }
  x = lx;
  return calcyz(n, x, y, z);
}
int main() {
  int n;
  scanf("%d", &n);
  minx = miny = minz = LINF;
  maxx = maxy = maxz = -LINF;
  for (int i = 0; i < n; i++) {
    scanf("%lf%lf%lf", xs + i, ys + i, zs + i);
    setmin(minx, xs[i]);
    setmax(maxx, xs[i]);
    setmin(miny, ys[i]);
    setmax(maxy, ys[i]);
    setmin(minz, zs[i]);
    setmax(maxz, zs[i]);
  }
  double bx, by, bz;
  calcxyz(n, bx, by, bz);
  printf("%.8lf %.8lf %.8lf\n", bx, by, bz);
  return 0;
}
