#include <bits/stdc++.h>
using namespace std;
map<double, double> M;
map<double, double> M2;
int N, K;
double Y[301][301];
double S[301];
int main() {
  scanf("%d %d", &N, &K);
  for (int i = 0; i < N; i++)
    for (int j = 0; j < K + 1; j++) scanf("%lf", &Y[i][j]);
  for (int x = 0; x < K; x++) {
    M.clear();
    M[0] = 0;
    M[1] = 0;
    for (int i = 0; i < N; i++) {
      M2.clear();
      M2[0] = M[0];
      double preX = 0, preY = M[0];
      for (map<double, double>::iterator it = M.begin(); it != M.end(); it++) {
        if (it->first == 0) continue;
        double cx = it->first;
        double cy = it->second;
        double y1 = Y[i][x] + (Y[i][x + 1] - Y[i][x]) * preX;
        double y2 = Y[i][x] + (Y[i][x + 1] - Y[i][x]) * cx;
        if (y1 >= preY && y2 >= cy) {
          S[i] += ((y1 + y2) - (cy + preY)) * (cx - preX) / 2.0;
          M2[cx] = y2;
        } else if (y1 <= preY && y2 <= cy) {
          M2[cx] = cy;
        } else if (y1 >= preY && y2 <= cy) {
          double num = fabs(y1 - preY);
          double denom = (fabs(y1 - preY) + fabs(y2 - cy));
          double nx = preX + (cx - preX) * (num / denom);
          double ny = preY + (cy - preY) * (num / denom);
          S[i] += ((y1 - preY)) * (nx - preX) / 2.0;
          M2[nx] = ny;
          M2[cx] = cy;
        } else if (y1 <= preY && y2 >= cy) {
          double num = fabs(y1 - preY);
          double denom = (fabs(y1 - preY) + fabs(y2 - cy));
          double nx = preX + (cx - preX) * (num / denom);
          double ny = preY + (cy - preY) * (num / denom);
          S[i] += ((y2 - cy)) * (cx - nx) / 2.0;
          M2[nx] = ny;
        }
        preX = cx;
        preY = cy;
      }
      M2[0] = max(M2[0], Y[i][x]);
      M2[1] = max(M2[1], Y[i][x + 1]);
      swap(M, M2);
    }
  }
  for (int i = 0; i < N; i++) printf("%.12lf\n", S[i]);
}
