#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops,fast-math")
using namespace std;
long long poww(long long a, long long b, long long md) {
  return (!b ? 1
             : (b & 1 ? a * poww(a * a % md, b / 2, md) % md
                      : poww(a * a % md, b / 2, md) % md));
}
const int maxn = 300 + 5;
const long long inf = 9223372036854775807;
const long long mod = 1e9 + 7;
const int lg = 20;
struct ch {
  int pos = 0, npos = 0;
  pair<long double, long double> pt[maxn], npt[maxn];
  ch() {
    for (int i = 0; i < maxn; i++) {
      pt[i] = npt[i] = {0.00000, 0.00000};
    }
  }
  pair<double, double> cut(pair<double, double> p1, pair<double, double> p2,
                           double a, double b) {
    double k = (p1.first - p2.first) / (p1.second - p2.second);
    double m = p1.first - k * p1.second;
    double rx = (a - m) / (k - b + a);
    double ry = k * rx + m;
    return make_pair(ry, rx);
  }
  void add(int a, int b) {
    if (pos == 0 || (a >= pt[0].first && b >= pt[pos - 1].first)) {
      pos = 2;
      pt[0] = make_pair(a, 0);
      pt[1] = make_pair(b, 1);
      return;
    }
    bool lw = a < pt[0].first;
    if (lw) {
      npt[0] = pt[0];
    } else {
      npt[0] = make_pair(a, 0);
    }
    npos = 1;
    for (int i = 1; i < pos; i++) {
      double h = pt[i].second * (b - a) + a;
      bool now = h < pt[i].first;
      if (lw) {
        if (!now) {
          npt[npos] = cut(pt[i - 1], pt[i], a, b);
          npos++;
          lw = false;
        } else {
          npt[npos] = pt[i];
          npos++;
        }
      } else {
        if (now) {
          npt[npos] = cut(pt[i - 1], pt[i], a, b);
          npos++;
          lw = true;
          npt[npos] = pt[i];
          npos++;
        }
      }
    }
    if (!lw) {
      npt[npos] = make_pair(b, 1);
      npos++;
    }
    for (int i = 0; i < npos; i++) pt[i] = npt[i];
    pos = npos;
  }
  double get() {
    double cur = 0;
    for (int i = 0; i < pos - 1; i++) {
      cur +=
          (pt[i].first + pt[i + 1].first) * (pt[i + 1].second - pt[i].second);
    }
    return cur / 2.0;
  }
};
ch c[maxn];
int n, k, x[maxn][maxn];
long double ans[maxn], s;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n >> k;
  cout << fixed << setprecision(5);
  for (int i = 1; i <= n; i++) {
    cin >> x[i][0];
    for (int j = 1; j <= k; j++) {
      s = c[j].get();
      cin >> x[i][j];
      c[j].add(x[i][j - 1], x[i][j]);
      ans[i] += c[j].get() - s;
    }
  }
  for (int i = 1; i <= n; i++) {
    cout << ans[i] << " " << endl;
  }
}
