#include <bits/stdc++.h>
template <typename T>
inline void SWAP(T &a, T &b) {
  T tmp = a;
  a = b;
  b = tmp;
}
template <typename T>
inline T ABS(const T &val) {
  return val < 0 ? -val : val;
}
template <typename T>
inline T MAX(const T &a, const T &b) {
  return a > b ? a : b;
}
template <typename T>
inline T MIN(const T &a, const T &b) {
  return a < b ? a : b;
}
const int INTinf = 2147483647;
const int nINTinf = 0 - 2147483648;
using namespace std;
inline long double sqr(const long double &q) { return q * q; }
struct pt {
  int x, y, z;
  pt() {}
  pt(int x, int y, int z) {
    this->x = x;
    this->y = y;
    this->z = z;
  }
};
struct ptd {
  long double x, y, z;
  ptd() {}
  ptd(long double x, long double y, long double z) {
    this->x = x;
    this->y = y;
    this->z = z;
  }
  long double dist(const pt &q) {
    long double tx = q.x - x, ty = q.y - y, tz = q.z - z;
    return tx * tx + ty * ty + tz * tz;
  }
};
int n;
pt mass[100];
int main() {
  cin >> n;
  ptd C(0, 0, 0);
  for (int i = 0; i != n; i++) {
    cin >> mass[i].x >> mass[i].y >> mass[i].z;
    C.x += mass[i].x;
    C.y += mass[i].y;
    C.z += mass[i].z;
  }
  C.x /= n;
  C.y /= n;
  C.z /= n;
  int iter = 1000000;
  while (iter) {
    iter--;
    long double step = sqr(iter / 100000.0);
    int id = 0;
    long double max_s = 0.0, d;
    for (int i = 0; i != n; i++) {
      d = C.dist(mass[i]);
      if (d > max_s) {
        max_s = d;
        id = i;
      }
    }
    long double dx = mass[id].x - C.x;
    long double dy = mass[id].y - C.y;
    long double dz = mass[id].z - C.z;
    long double s = ABS(dx) + ABS(dy) + ABS(dz);
    if (s < 1e-8) break;
    C.x += dx / s * step;
    C.y += dy / s * step;
    C.z += dz / s * step;
  }
  cout.setf(ios_base::fixed);
  cout.precision(8);
  cout << C.x << ' ' << C.y << ' ' << C.z << endl;
  return 0;
}
