#include <bits/stdc++.h>
using namespace std;
const long double pi = 3.141592653589793238462643l;
long double y[310][310];
pair<long double, long double> isct(int i1, int i2, int j) {
  long double y0 = y[i1][j], y1 = y[i1][j + 1];
  long double z0 = y[i2][j], z1 = y[i2][j + 1];
  long double x = (y0 - z0) / (y0 - y1 - z0 + z1);
  return make_pair(x, y0 + (y1 - y0) * x);
}
long double ans[310];
int main() {
  int n, k;
  cin >> n >> k;
  for (int i = 0; i < int(n); i++) {
    for (int j = 0; j < int(k + 1); j++) {
      cin >> y[i][j];
    }
  }
  for (int i = 0; i < int(k); i++) {
    vector<int> v;
    vector<pair<long double, long double> > p;
    p.push_back(make_pair(0.5, -1));
    long double s = 0;
    for (int j = 0; j < int(n); j++) {
      long double y0 = y[j][i], y1 = y[j][i + 1];
      int l = 0;
      while (l < (int)p.size() &&
             p[l].second + 1e-10 > y0 + (y1 - y0) * p[l].first) {
        l++;
      }
      int r = l;
      while (r < (int)p.size() &&
             p[r].second + 1e-10 < y0 + (y1 - y0) * p[r].first) {
        r++;
      }
      if (r != l) {
        pair<long double, long double> p1, p2;
        if (l == 0) {
          p1 = make_pair(0, y0);
        } else {
          p1 = isct(v[l - 1], j, i);
        }
        if (r == (int)p.size()) {
          p2 = make_pair(1, y1);
        } else {
          p2 = isct(v[r - 1], j, i);
        }
        v.erase(v.begin() + l, v.begin() + r - 1);
        v.insert(v.begin() + l, j);
        p.erase(p.begin() + l, p.begin() + r);
        p.insert(p.begin() + l, p2);
        p.insert(p.begin() + l, p1);
      }
      long double s1 = 0;
      for (int t = 0; t < int(p.size() - 1); t++) {
        s1 +=
            (p[t + 1].first - p[t].first) * (p[t + 1].second + p[t].second) / 2;
      }
      ans[j] += s1 - s;
      s = s1;
    }
  }
  for (int i = 0; i < int(n); i++) {
    printf("%0.10lf\n", (double)ans[i]);
  }
  return 0;
}
