#include <bits/stdc++.h>
using namespace std;
int n = 0;
struct Point {
  Point() {}
  Point(double x0, double y0, double z0) {
    x = x0;
    y = y0;
    z = z0;
  }
  double x;
  double y;
  double z;
};
vector<Point> planets;
Point result;
double min_dist = 1e10;
double PHI;
double get_dist(double x0, double y0, double z0) {
  double max_dist = 0.0;
  for (int i = 0; i < n; ++i) {
    max_dist = max(max_dist, (planets[i].x - x0) * (planets[i].x - x0) +
                                 (planets[i].y - y0) * (planets[i].y - y0) +
                                 (planets[i].z - z0) * (planets[i].z - z0));
  }
  if (max_dist < min_dist) {
    min_dist = max_dist;
    result = Point(x0, y0, z0);
  }
  return max_dist;
}
double get_dist(double x0, double y0) {
  double l = -1.0e4, r = 1.0e4;
  while ((r - l) > 1e-7) {
    double z1 = l + (r - l) / 3.0;
    double z2 = r - (r - l) / 3.0;
    if (get_dist(x0, y0, z1) > get_dist(x0, y0, z2))
      l = z1;
    else
      r = z2;
  }
  return get_dist(x0, y0, (l + r) / 2.0);
}
double get_dist(double x0) {
  double l = -1.0e4, r = 1.0e4;
  while ((r - l) > 1e-7) {
    double y1 = l + (r - l) / 3.0;
    double y2 = r - (r - l) / 3.0;
    if (get_dist(x0, y1) > get_dist(x0, y2))
      l = y1;
    else
      r = y2;
  }
  return get_dist(x0, (l + r) / 2.0);
}
void ternary_search() {
  double l = -1.0e4, r = 1.0e4;
  while ((r - l) > 1e-7) {
    double x1 = l + (r - l) / 3.0;
    double x2 = r - (r - l) / 3.0;
    if (get_dist(x1) > get_dist(x2))
      l = x1;
    else
      r = x2;
  }
}
int main() {
  cin >> n;
  planets.resize(n);
  for (int i = 0; i < n; ++i) {
    cin >> planets[i].x >> planets[i].y >> planets[i].z;
  }
  PHI = (1.0 + sqrt(5.0)) / 2.0;
  ternary_search();
  cout << fixed << setprecision(6) << result.x << " " << result.y << " "
       << result.z;
  return 0;
}
