#include <bits/stdc++.h>
using namespace std;
const int N = 310;
int n, k;
double y[N][N];
struct P {
  double x, y;
  P() {}
  P(double i, double j) : x(i), y(j) {}
} p[N], t[N];
int l, tl;
int down[N];
double ans[N];
int isdown(P p, double y1, double y2, double x1) {
  double ym = y1 + (y2 - y1) * (p.x - x1);
  return p.y <= ym;
}
double cha(double x1, double y1, double x2, double y2) {
  return x1 * y2 - y1 * x2;
}
P jiao(P a1, P a2, P b1, P b2) {
  P ret = a1;
  double t = ((a1.x - b1.x) * (b1.y - b2.y) - (a1.y - b1.y) * (b1.x - b2.x)) /
             ((a1.x - a2.x) * (b1.y - b2.y) - (a1.y - a2.y) * (b1.x - b2.x));
  ret.x += (a2.x - a1.x) * t;
  ret.y += (a2.y - a1.y) * t;
  return ret;
}
double carea() {
  double r = 0;
  for (int i = 0; i < tl; i++)
    r += cha(t[i].x, t[i].y, t[(i + 1) % tl].x, t[(i + 1) % tl].y);
  r = fabs(r);
  r /= 2;
  return r;
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; i++)
    for (int j = 0; j <= k; j++) scanf("%lf", &y[i][j]);
  memset(ans, 0, sizeof(ans));
  for (int j = 1; j <= k; j++) {
    l = 0;
    p[l++] = P(j - 1, 0);
    p[l++] = P(j, 0);
    for (int i = 0; i < n; i++) {
      for (int q = 0; q < l; q++)
        down[q] = isdown(p[q], y[i][j - 1], y[i][j], j - 1);
      int alld = 1, allu = 1;
      for (int q = 0; q < l; q++) {
        if (down[q])
          allu = 0;
        else
          alld = 0;
      }
      if (allu) continue;
      tl = 0;
      if (down[0]) t[tl++] = P(j - 1, y[i][j - 1]);
      for (int q = 0; q < l; q++) {
        if (q && down[q] != down[q - 1]) {
          t[tl++] = jiao(p[q - 1], p[q], P(j - 1, y[i][j - 1]), P(j, y[i][j]));
        }
        if (down[q]) t[tl++] = p[q];
      }
      if (down[l - 1]) t[tl++] = P(j, y[i][j]);
      ans[i] += carea();
      if (alld) {
        l = 0;
        p[l++] = P(j - 1, y[i][j - 1]);
        p[l++] = P(j, y[i][j]);
        continue;
      }
      tl = 0;
      if (down[0]) t[tl++] = P(j - 1, y[i][j - 1]);
      for (int q = 0; q < l; q++) {
        if (q && down[q] != down[q - 1]) {
          t[tl++] = jiao(p[q - 1], p[q], P(j - 1, y[i][j - 1]), P(j, y[i][j]));
        }
        if (!down[q]) t[tl++] = p[q];
      }
      if (down[l - 1]) t[tl++] = P(j, y[i][j]);
      l = tl;
      memcpy(p, t, sizeof(p));
    }
  }
  for (int i = 0; i < n; i++) printf("%.9f\n", ans[i]);
  return 0;
}
