#include <bits/stdc++.h>
using namespace std;
const int MAXN = 110;
const double eps = 1e-8;
struct point {
  double x, y, z;
  point(double a = 0, double b = 0, double c = 0) {
    x = a;
    y = b;
    z = c;
  }
  void input() { scanf("%lf%lf%lf", &x, &y, &z); }
  point operator+(const point &p) { return point(x + p.x, y + p.y, z + p.z); }
};
point ps[MAXN];
int n;
inline double gdis(point &p1, point &p2) {
  return (p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y) +
         (p2.z - p1.z) * (p2.z - p1.z);
}
double calc(point &p, int &id) {
  double ans = -1;
  for (int i = 0; i < n; i++) {
    double ret = gdis(p, ps[i]);
    if (ans < ret) {
      ans = ret;
      id = i;
    }
  }
  return ans;
}
int main() {
  scanf("%d", &n);
  point p(0, 0, 0);
  for (int i = 0; i < n; i++) {
    ps[i].input();
    p = p + ps[i];
  }
  p.x /= n;
  p.y /= n;
  p.z /= n;
  int id;
  double minv = calc(p, id);
  double delta = 0.5;
  while (delta > eps) {
    for (int i = 0; i < 300; i++) {
      double ret = calc(p, id);
      p.x += (ps[id].x - p.x) * delta;
      p.y += (ps[id].y - p.y) * delta;
      p.z += (ps[id].z - p.z) * delta;
    }
    delta /= 2;
  }
  printf("%.10f %.10f %.10f\n", p.x, p.y, p.z);
  return 0;
}
