#include <bits/stdc++.h>
using namespace std;
const int MAX = 120;
const double eps = 1e-13;
template <typename T>
inline void checkmin(T& a, const T& b) {
  if (a > b) a = b;
}
template <typename T>
inline void checkmax(T& a, const T& b) {
  if (a < b) a = b;
}
int sgn(double x) { return x < -eps ? -1 : x > eps; }
struct Point {
  double x, y, z;
  Point() {}
  Point(double x, double y, double z) : x(x), y(y), z(z) {}
  Point operator+(const Point& p) const {
    return Point(x + p.x, y + p.y, z + p.z);
  }
  Point operator-(const Point& p) const {
    return Point(x - p.x, y - p.y, z - p.z);
  }
  Point operator*(const double& d) const { return Point(x * d, y * d, z * d); }
  double norm() const { return x * x + y * y + z * z; }
  void init() { scanf("%lf%lf%lf", &x, &y, &z); }
} p[MAX];
int n;
int F(const Point& pt) {
  int idx = 0;
  double ret = (pt - p[0]).norm();
  for (int i = 1; i < n; i++) {
    double tmp = (pt - p[i]).norm();
    if (sgn(tmp - ret) > 0) {
      ret = tmp;
      idx = i;
    }
  }
  return idx;
}
int main() {
  double delta;
  Point ret;
  int id;
  scanf("%d", &n);
  ret = Point(0, 0, 0);
  for (int i = 0; i < n; i++) p[i].init(), ret = ret + p[i];
  ret.x /= n;
  ret.y /= n;
  ret.z /= n;
  delta = 0.1;
  for (int i = 0; i < 25000; i++) {
    id = F(ret);
    ret = ret + (p[id] - ret) * delta;
    delta *= 0.999;
  }
  printf("%.10f %.10f %.10f\n", ret.x, ret.y, ret.z);
  return 0;
}
