#include <bits/stdc++.h>
#pragma warning(disable : 4996)
#pragma comment(linker, "/STACK:666000000")
using namespace std;
const int inf = (1 << 30) - 1;
const long double eps = 1e-9;
const long double pi = fabs(atan2(0.0, -1.0));
void ML(const bool v) {
  if (v) return;
  int *ass;
  for (;;) {
    ass = new int[2500000];
    for (int i = 0; i < 2500000; i++) ass[i] = rand();
  }
}
void TL(const bool v) {
  if (v) return;
  int *ass;
  ass = new int[250];
  for (;;) {
    for (int i = 0; i < 250; i++) ass[i] = rand();
  }
}
void PE(const bool v) {
  if (v) return;
  puts("ass 1 2 3 4 5 6 fuck");
  exit(0);
}
int n;
int x[100], y[100], z[100];
void LoAd() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d%d%d", &x[i], &y[i], &z[i]);
}
double r(double MX = 20000.0) { return MX * rand() / RAND_MAX - MX / 2; }
double dist(int i, int j) {
  return ((x[j] - x[i]) * (x[j] - x[i])) + ((y[j] - y[i]) * (y[j] - y[i])) +
         ((z[j] - z[i]) * (z[j] - z[i]));
}
double dist(double xi, double yi, double zi) {
  double res = 0;
  for (int i = 0; i < n; i++)
    res = max(res, ((xi - x[i]) * (xi - x[i])) + ((yi - y[i]) * (yi - y[i])) +
                       ((zi - z[i]) * (zi - z[i])));
  return res;
}
struct node {
  double x, y, z, d;
};
const int IT = 70;
node cz(const double x, const double y) {
  double lz = -10000;
  double rz = 10000;
  for (int i = 0; i < IT; i++) {
    double z1 = lz + (rz - lz) / 3 * 1;
    double z2 = lz + (rz - lz) / 3 * 2;
    if (dist(x, y, z1) > dist(x, y, z2))
      lz = z1;
    else
      rz = z2;
  }
  node res;
  res.d = dist(x, y, lz);
  res.z = lz;
  return res;
}
node cy(const double x) {
  double ly = -10000;
  double ry = 10000;
  double z;
  for (int i = 0; i < IT; i++) {
    double y1 = ly + (ry - ly) / 3 * 1;
    double y2 = ly + (ry - ly) / 3 * 2;
    if (cz(x, y1).d > cz(x, y2).d)
      ly = y1;
    else
      ry = y2;
  }
  node res;
  res.d = cz(x, ly).d;
  res.z = cz(x, ly).z;
  res.y = ly;
  return res;
}
void SoLvE() {
  double lx = -10000;
  double rx = 10000;
  for (int i = 0; i < IT; i++) {
    double x1 = lx + (rx - lx) / 3 * 1;
    double x2 = lx + (rx - lx) / 3 * 2;
    if (cy(x1).d > cy(x2).d)
      lx = x1;
    else
      rx = x2;
  }
  node res = cy(lx);
  res.x = lx;
  printf("%0.8f %0.8f %0.8f\n", res.x, res.y, res.z);
}
int main() {
  srand((int)time(NULL));
  LoAd();
  SoLvE();
  return 0;
}
