#include <bits/stdc++.h>
using namespace std;
const int N = 300 + 9;
struct Point {
  double x, y;
};
double y[N][N];
double ans[N];
int sgn(double x) {
  if (fabs(x) < 1e-7) return 0;
  if (x > 0) return 1;
  return -1;
}
double cross(Point a, Point b, Point c) {
  return ((b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y));
}
double area(vector<Point> p, int x) {
  Point o = (Point){(double)x, 0};
  double res = 0;
  for (int i = 0; i < p.size() - 1; ++i) {
    res += cross(o, p[i], p[i + 1]);
  }
  Point tem = (Point){(double)x + 1, 0};
  res += cross(o, p[p.size() - 1], tem);
  res = -res;
  return res / 2.0;
}
Point line_cross(Point a, Point b, Point c, Point d) {
  double u = cross(a, b, c), v = cross(b, a, d);
  return (Point){(c.x * v + d.x * u) / (u + v), (c.y * v + d.y * u) / (u + v)};
}
void solve(Point a, Point b, vector<Point>& p) {
  vector<Point> res;
  res.push_back((Point){a.x, max(a.y, p[0].y)});
  for (int i = 1; i < p.size(); ++i) {
    int l = sgn(cross(a, b, p[i - 1]));
    int r = sgn(cross(a, b, p[i]));
    if (r == 0)
      res.push_back(p[i]);
    else if (r > 0) {
      if (l < 0) {
        res.push_back(line_cross(p[i - 1], p[i], a, b));
      }
      res.push_back(p[i]);
    } else {
      if (l > 0) res.push_back(line_cross(p[i - 1], p[i], a, b));
      if (i == p.size() - 1) res.push_back(b);
    }
  }
  p.clear();
  for (auto v : res) p.push_back(v);
  return;
}
int main() {
  int n, k;
  scanf("%d %d", &n, &k);
  for (int i = 1; i <= n; ++i) {
    for (int j = 0; j <= k; ++j) scanf("%lf", &y[i][j]);
  }
  for (int i = 0; i < k; ++i) {
    vector<Point> p;
    double res = 0;
    for (int j = 1; j <= n; ++j) {
      Point a = (Point){(double)i, y[j][i]};
      Point b = (Point){i + 1.0, y[j][i + 1]};
      if (j == 1) {
        p.push_back(a);
        p.push_back(b);
      } else {
        solve(a, b, p);
      }
      double las = res;
      res = area(p, i);
      ans[j] += res - las;
    }
  }
  for (int i = 1; i <= n; ++i) printf("%.8f\n", ans[i]);
  return 0;
}
