#include <bits/stdc++.h>
int n;
double x, y, z;
double planet[200][3];
double xMin = 9999999, xMax = -9999999;
double yMin = 9999999, yMax = -9999999;
double zMin = 9999999, zMax = -9999999;
inline double dist(double x1, double y1, double z1, double x2, double y2,
                   double z2) {
  return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) +
              (z2 - z1) * (z2 - z1));
}
double maxDistance(double x1, double y1, double z1) {
  double maxDistance = -1;
  for (int i = 0; i < n; i++) {
    double distance = sqrt((planet[i][0] - x1) * (planet[i][0] - x1) +
                           (planet[i][1] - y1) * (planet[i][1] - y1) +
                           (planet[i][2] - z1) * (planet[i][2] - z1));
    if (distance > maxDistance) {
      maxDistance = distance;
    }
  }
  return maxDistance;
}
double dist1(double x, double y) {
  double zLeft = -10000;
  double zRight = 10000;
  double z1, z2;
  double maxDist1, maxDist2, max = 0;
  while ((zRight - zLeft) > 0.000001) {
    z1 = zLeft + (zRight - zLeft) / 3.0;
    maxDist1 = maxDistance(x, y, z1);
    z2 = zLeft + 2.0 * (zRight - zLeft) / 3.0;
    maxDist2 = maxDistance(x, y, z2);
    if (maxDist1 < maxDist2) {
      zRight = z2;
      max = maxDist2;
      z = z2;
    } else {
      zLeft = z1;
      z = z1;
      max = maxDist1;
    }
  }
  return max;
}
double dist2(double x) {
  double yLeft = -10000.0;
  double yRight = 10000.0;
  double y1, y2;
  double maxDist1, maxDist2, max = 0;
  while ((yRight - yLeft) > 0.000001) {
    y1 = yLeft + (yRight - yLeft) / 3.0;
    maxDist1 = dist1(x, y1);
    y2 = yLeft + 2.0 * (yRight - yLeft) / 3.0;
    maxDist2 = dist1(x, y2);
    if (maxDist1 < maxDist2) {
      yRight = y2;
      max = maxDist2;
      y = y2;
    } else {
      yLeft = y1;
      y = y1;
      max = maxDist1;
    }
  }
  return max;
}
double dist3() {
  double xLeft = -10000.0;
  double xRight = 10000.0;
  double x1, x2;
  double maxDist1, maxDist2, max = 0;
  while ((xRight - xLeft) > 0.000001) {
    x1 = xLeft + (xRight - xLeft) / 3.0;
    maxDist1 = dist2(x1);
    x2 = xLeft + 2.0 * (xRight - xLeft) / 3.0;
    maxDist2 = dist2(x2);
    if (maxDist1 < maxDist2) {
      xRight = x2;
      max = maxDist2;
      x = x2;
    } else {
      xLeft = x1;
      x = x1;
      max = maxDist1;
    }
  }
  return max;
}
void read() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%lf", &planet[i][0]);
    scanf("%lf", &planet[i][1]);
    scanf("%lf", &planet[i][2]);
    if (planet[i][0] > xMax) xMax = planet[i][0];
    if (planet[i][0] < xMin) xMin = planet[i][0];
    if (planet[i][1] > yMax) yMax = planet[i][1];
    if (planet[i][1] < yMin) yMin = planet[i][1];
    if (planet[i][2] > zMax) zMax = planet[i][2];
    if (planet[i][2] < zMin) zMin = planet[i][2];
  }
}
int main() {
  read();
  if (n == 1) {
    printf("%f %f %f", planet[0][0], planet[0][1], planet[0][2]);
    return 0;
  }
  x = y = z = 0;
  double fact = 1.0;
  for (int t = 0; t < 20000; t++) {
    int ind = 0;
    double maxDistance = -1;
    for (int i = 0; i < n; i++) {
      double distance = sqrt((planet[i][0] - x) * (planet[i][0] - x) +
                             (planet[i][1] - y) * (planet[i][1] - y) +
                             (planet[i][2] - z) * (planet[i][2] - z));
      if (distance > maxDistance) {
        maxDistance = distance;
        ind = i;
      }
    }
    x += fact * (planet[ind][0] - x);
    y += fact * (planet[ind][1] - y);
    z += fact * (planet[ind][2] - z);
    fact *= 0.999;
  }
  printf("%lf %lf %lf \n", x, y, z);
  return 0;
}
