#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 9;
const long double INF = 10001;
const long double EPS = 1e-9;
struct point {
  long double x, y, z, d;
  point() {}
  point(long double x1, long double y1, long double z1, long double d1) {
    x = x1;
    y = y1;
    z = z1;
    d = d1;
  }
  long double dist(point p) {
    return (x - p.x) * (x - p.x) + (y - p.y) * (y - p.y) +
           (z - p.z) * (z - p.z);
  }
};
long long n;
vector<point> a;
long double f(long double x, long double y, long double z) {
  point p(x, y, z, 0);
  long double maxd = -1;
  for (auto i : a) {
    maxd = max(maxd, p.dist(i));
  }
  return maxd;
}
const int k = 60;
point ternZ(long double x, long double y) {
  long double l = -INF, r = INF, m1, m2;
  long double dist1, dist2;
  for (int i = 0; i < k; ++i) {
    m1 = (2 * l + r) / 3;
    m2 = (2 * r + l) / 3;
    dist1 = f(x, y, m1);
    dist2 = f(x, y, m2);
    if (dist1 > dist2) {
      l = m1;
    } else {
      r = m2;
    }
  }
  point ans = point(x, y, l, f(x, y, l));
  point tmp = point(x, y, m1, f(x, y, m1));
  if (tmp.d < ans.d) ans = tmp;
  tmp = point(x, y, m2, f(x, y, m2));
  if (tmp.d < ans.d) ans = tmp;
  tmp = point(x, y, r, f(x, y, r));
  if (tmp.d < ans.d) ans = tmp;
  return ans;
}
point ternY(long double x) {
  long double l = -INF, r = INF, m1, m2;
  point p1, p2;
  for (int i = 0; i < k; ++i) {
    m1 = (2 * l + r) / 3;
    m2 = (2 * r + l) / 3;
    p1 = ternZ(x, m1);
    p2 = ternZ(x, m2);
    if (p1.d > p2.d) {
      l = m1;
    } else {
      r = m2;
    }
  }
  point ans = ternZ(x, l);
  point tmp = ternZ(x, m1);
  if (tmp.d < ans.d) ans = tmp;
  tmp = ternZ(x, m2);
  if (tmp.d < ans.d) ans = tmp;
  tmp = ternZ(x, r);
  if (tmp.d < ans.d) ans = tmp;
  return ans;
}
point ternX() {
  long double l = -INF, r = INF, m1, m2;
  point p1, p2;
  for (int i = 0; i < k; ++i) {
    m1 = (2 * l + r) / 3;
    m2 = (2 * r + l) / 3;
    p1 = ternY(m1);
    p2 = ternY(m2);
    if (p1.d > p2.d) {
      l = m1;
    } else {
      r = m2;
    }
  }
  point ans = ternY(l);
  point tmp = ternY(m1);
  if (tmp.d < ans.d) ans = tmp;
  tmp = ternY(m2);
  if (tmp.d < ans.d) ans = tmp;
  tmp = ternY(r);
  if (tmp.d < ans.d) ans = tmp;
  return ans;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  cout.precision(10);
  a.resize(n);
  for (auto& i : a) cin >> i.x >> i.y >> i.z;
  point p = ternX();
  cout << fixed << p.x << " " << p.y << " " << p.z;
  return 0;
}
