#include <bits/stdc++.h>
using namespace std;
template <typename A, typename B>
inline void umax(A &a, B b) {
  if (a < b) a = b;
}
const double eps = 1e-7;
const double inf = 1e4;
vector<vector<double>> s;
inline double sq(double x) { return x * x; }
double get(double x, double y, double z) {
  double res = 0;
  for (auto &i : s) {
    umax(res, sq(i[0] - x) + sq(i[1] - y) + sq(i[2] - z));
  }
  return res;
}
vector<double> tsz(double x, double y) {
  double L = -inf, R = inf;
  double r1, r2;
  while (R - L > eps) {
    double M1 = (L * 2 + R) / 3;
    double M2 = (L + 2 * R) / 3;
    r1 = get(x, y, M1);
    r2 = get(x, y, M2);
    if (r1 < r2)
      R = M2;
    else
      L = M1;
  }
  return {L, r1};
}
vector<double> tsy(double x) {
  double L = -inf, R = inf;
  double z1, z2, r1, r2;
  while (R - L > eps) {
    double M1 = (L * 2 + R) / 3;
    double M2 = (L + 2 * R) / 3;
    vector<double> kek = tsz(x, M1);
    z1 = kek[0];
    r1 = kek[1];
    vector<double> lol = tsz(x, M2);
    r2 = lol[1];
    if (r1 < r2)
      R = M2;
    else
      L = M1;
  }
  return {L, z1, r1};
}
vector<double> tsx() {
  double L = -inf, R = inf;
  double y1, z1, r1, r2;
  while (R - L > eps) {
    double M1 = (L * 2 + R) / 3;
    double M2 = (L + 2 * R) / 3;
    vector<double> kek = tsy(M1);
    vector<double> lol = tsy(M2);
    y1 = kek[0], z1 = kek[1], r1 = kek[2];
    r2 = lol[2];
    if (r1 < r2)
      R = M2;
    else
      L = M1;
  }
  return {L, y1, z1};
}
int main() {
  cout.tie(nullptr);
  cin.tie(nullptr);
  ios_base::sync_with_stdio(false);
  cout << fixed << setprecision(16);
  int n;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    double x, y, z;
    cin >> x >> y >> z;
    s.push_back({x, y, z});
  }
  vector<double> ans = tsx();
  cout << ans[0] << ' ' << ans[1] << ' ' << ans[2];
}
