#include <bits/stdc++.h>
using namespace std;
inline int getint() {
  int val = 0;
  char c;
  while ((c = getchar()) && !(c >= '0' && c <= '9'))
    ;
  do {
    val = (val * 10) + c - '0';
  } while ((c = getchar()) && (c >= '0' && c <= '9'));
  return val;
}
const int Y = 200100;
const long long A = 179;
const long double vl = 10001;
struct Pt {
  long double x;
  long double y;
  long double z;
  Pt(long double X = 0, long double Y = 0, long double Z = 0) {
    x = X;
    y = Y;
    z = Z;
  }
};
long double LD(Pt a, Pt b) {
  return (long double)(a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y) +
         (a.z - b.z) * (a.z - b.z);
}
int n;
const long double ep = 0.00000005;
Pt aa[200000];
long double NR = 1000000000000000000;
Pt res;
int gg = 74;
long double val(Pt a) {
  long double r = 0;
  for (int i = 0; i < n; ++i) {
    r = max(r, LD(a, aa[i]));
  }
  if (r < NR) {
    NR = r;
    res = a;
  }
  return r;
}
long double trez(long double x, long double y) {
  long double l = -vl, r = vl;
  long double m1 = (2 * l + r) / 3, m2 = (l + 2 * r) / 3;
  for (int i = 0; i < gg; ++i, m1 = (2 * l + r) / 3, m2 = (l + 2 * r) / 3) {
    if (val(Pt(x, y, m1)) >= val(Pt(x, y, m2))) {
      l = m1;
    } else {
      r = m2;
    }
  }
  long double rr = val(Pt(x, y, l));
  rr = min(rr, val(Pt(x, y, m1)));
  rr = min(rr, val(Pt(x, y, m2)));
  rr = min(rr, val(Pt(x, y, r)));
  return rr;
}
long double trey(long double x) {
  long double l = -vl, r = vl;
  long double m1 = (2 * l + r) / 3, m2 = (l + 2 * r) / 3;
  for (int i = 0; i < gg; ++i, m1 = (2 * l + r) / 3, m2 = (l + 2 * r) / 3) {
    if (trez(x, m1) >= trez(x, m2)) {
      l = m1;
    } else
      r = m2;
  }
  long double rr = trez(x, m1);
  rr = min(rr, trez(x, m2));
  rr = min(rr, trez(x, l));
  rr = min(rr, trez(x, r));
  return rr;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout.precision(10);
  cin >> n;
  for (int i = 0; i < n; ++i) cin >> aa[i].x >> aa[i].y >> aa[i].z;
  long double l = -vl, r = vl;
  long double m1 = (2 * l + r) / 3, m2 = (l + 2 * r) / 3;
  for (int i = 0; i < gg; ++i, m1 = (2 * l + r) / 3, m2 = (l + 2 * r) / 3) {
    if (trey(m1) >= trey(m2)) {
      l = m1;
    } else
      r = m2;
  }
  cout << fixed << res.x << " " << res.y << " " << res.z;
  return 0;
}
