#include <bits/stdc++.h>
using namespace std;
vector<pair<double, double> > v[301];
int val[301];
struct line {
  pair<double, double> a, b;
  line(pair<double, double> x, pair<double, double> y) {
    a = x;
    b = y;
  }
};
double inter(const line &l, double x) {
  double m = (l.a.second - l.b.second) / (l.a.first - l.b.first);
  double c = -m * l.a.first + l.a.second;
  return m * x + c;
}
pair<double, double> inter(const line &p, const line &q) {
  if (p.a.first == p.b.first)
    return pair<double, double>(p.a.first, inter(q, p.a.first));
  if (q.a.first == q.b.first)
    return pair<double, double>(q.a.first, inter(p, q.a.first));
  double m1 = (p.a.second - p.b.second) / (p.a.first - p.b.first);
  double m2 = (q.a.second - q.b.second) / (q.a.first - q.b.first);
  double c1 = -m1 * p.a.first + p.a.second;
  double c2 = -m2 * q.a.first + q.a.second;
  double x = (c2 - c1) / (m1 - m2);
  double y = m1 * x + c1;
  return pair<double, double>(x, y);
}
double farea(vector<pair<double, double> > &v) {
  if (((int)(v.size())) == 0) return 0;
  double area = 0.0;
  v.push_back(v[0]);
  for (int i = 0; i < (((int)(v.size())) - 1); i++) {
    area += v[i + 1].first * v[i].second - v[i].first * v[i + 1].second;
  }
  return (((area) < 0) ? (-(area)) : (area)) / 2.0;
}
int main() {
  FILE *fin = stdin;
  int n, k, i, j, nw, st, en;
  double area, y1, y2;
  fscanf(fin, "%d%d", &n, &k);
  for ((i) = 0; (i) < (k); (i)++) {
    v[i].push_back(pair<double, double>(0, 10000));
    v[i].push_back(pair<double, double>(0, 0));
    v[i].push_back(pair<double, double>(1, 0));
    v[i].push_back(pair<double, double>(1, 10000));
  }
  vector<pair<double, double> > tmp, tmp2;
  for ((i) = 0; (i) < (n); (i)++) {
    for ((j) = 0; (j) < (k + 1); (j)++) {
      fscanf(fin, "%d", &val[j]);
    }
    area = 0.0;
    for ((j) = 0; (j) < (k); (j)++) {
      tmp.clear();
      tmp2.clear();
      line cur(pair<double, double>(0, val[j]),
               pair<double, double>(1, val[j + 1]));
      st = -1;
      en = -1;
      for ((nw) = 0; (nw) < (((int)(v[j].size())) - 1); (nw)++) {
        y1 = inter(cur, v[j][nw].first);
        y2 = inter(cur, v[j][nw + 1].first);
        if (j == 7) {
        }
        if ((y1 <= v[j][nw].second && y2 <= v[j][nw + 1].second)) continue;
        if ((y1 != v[j][nw].second) && (y2 != v[j][nw + 1].second) &&
            ((y1 >= v[j][nw].second && y2 >= v[j][nw + 1].second)))
          continue;
        if (y1 == v[j][nw].second && y2 == v[j][nw + 1].second) continue;
        if (st == -1)
          st = nw + 1;
        else
          en = nw + 1;
      }
      if (st == -1 || en == -1) continue;
      for ((nw) = 0; (nw) < (st); (nw)++) tmp2.push_back(v[j][nw]);
      tmp.push_back(inter(line(v[j][st - 1], v[j][st]), cur));
      tmp2.push_back(inter(line(v[j][st - 1], v[j][st]), cur));
      for (nw = st; nw < en; nw++) tmp.push_back(v[j][nw]);
      tmp.push_back(inter(line(v[j][en - 1], v[j][en]), cur));
      tmp2.push_back(inter(line(v[j][en - 1], v[j][en]), cur));
      for (nw = en; nw < ((int)(v[j].size())); nw++) tmp2.push_back(v[j][nw]);
      area += farea(tmp);
      v[j] = tmp2;
    }
    printf("%.9lf\n", area);
  }
  return 0;
}
