#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
struct P {
  double x, y, z, a[3];
  P() {}
  P(double x, double y, double z) : x(x), y(y), z(z) {}
  P operator+(P p) { return P(x + p.x, y + p.y, z + p.z); }
  P operator-(P p) { return P(x - p.x, y - p.y, z - p.z); }
  P operator*(double k) { return P(x * k, y * k, z * k); }
  P operator^(P p) {
    double a = p.x, b = p.y, c = p.z;
    return P(y * c - z * b, z * a - c * x, x * b - y * a);
  }
  double operator*(P p) { return x * p.x + y * p.y + z * p.z; }
  void eat() { scanf("%lf%lf%lf", &x, &y, &z); }
  bool operator<(const P &p) const {
    if (fabs((x) - (p.x)) < 1e-10)
      if (fabs((y) - (p.y)) < 1e-10)
        return (z) < (p.z) - 1e-10;
      else
        return (y) < (p.y) - 1e-10;
    return (x) < (p.x) - 1e-10;
  }
  bool operator==(const P &p) const { return !(*this < p) && !(p < *this); };
  double len2() { return x * x + y * y + z * z; }
  double len() { return sqrt(len2()); }
  P nor() {
    double l = len();
    if (fabs((l) - (0)) < 1e-10) return *this;
    return *this * (1 / l);
  }
  P rot(P z, double t) {
    return *this * cos(t) + (z ^ *this) * sin(t) +
           z * (z * (*this)) * (1 - cos(t));
  }
  P rot(P z) { return z ^ (*this) + z * (z * (*this)); }
  double dist(P p) { return (*this - p).len(); }
  void genA() { a[0] = x, a[1] = y, a[2] = z; }
  void out() { printf("(%.2lf,%.2lf,%.2lf)", x, y, z); }
};
P v[120];
int nn;
int main() {
  scanf("%d", &nn);
  for (int i = 0; i < nn; i++) v[i].eat();
  int xx = 50000;
  double rate = 1.0;
  P cur = P(0, 0, 0);
  while (xx--) {
    double xmax = 0;
    int mi = 0;
    for (int i = 0; i < nn; i++) {
      double dis = (v[i] - cur).len();
      if (xmax < dis) {
        xmax = dis;
        mi = i;
      }
    }
    P last = cur;
    cur = cur + (v[mi] - cur) * rate;
    rate *= 0.9993;
  }
  printf("%.10lf %.10lf %.10lf\n", cur.x, cur.y, cur.z);
  return 0;
}
