#include <bits/stdc++.h>
using namespace std;
void UpdatePolyline(map<double, double>* poly, double l, double r) {
  auto last_it = poly->begin();
  for (auto it = poly->begin(); it != poly->end(); ++it) {
    double segl = l * (1 - last_it->first) + r * last_it->first;
    double segr = l * (1 - it->first) + r * it->first;
    if ((segl > last_it->second) != (segr > it->second)) {
      double dly = abs(segl - last_it->second);
      double dry = abs(segr - it->second);
      double ratio = dly / (dly + dry);
      double ix = last_it->first + (it->first - last_it->first) * ratio;
      double iy = segl * (1 - ratio) + segr * ratio;
      (*poly)[ix] = iy;
    }
    last_it = it;
  }
  for (auto it = poly->begin(); it != poly->end(); ++it) {
    double x = it->first;
    double lr_pt = l * (1 - x) + r * x;
    it->second = max(it->second, lr_pt);
  }
}
double Area(const map<double, double>& poly) {
  auto last_it = poly.begin();
  double area = 0.0;
  for (auto it = poly.begin(); it != poly.end(); ++it) {
    if (it == poly.begin()) continue;
    area += (it->first - last_it->first) * (it->second + last_it->second) / 2;
    last_it = it;
  }
  return area;
}
void FillAreas(const vector<double>& l, const vector<double>& r, double areas[],
               long n) {
  map<double, double> poly;
  poly[0] = l[0];
  poly[1] = r[0];
  double total_area = (l[0] + r[0]) / 2;
  areas[0] += total_area;
  for (long i = 1; i < n; ++i) {
    UpdatePolyline(&poly, l[i], r[i]);
    double new_total_area = Area(poly);
    areas[i] += new_total_area - total_area;
    total_area = new_total_area;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  long n, k;
  cin >> n >> k;
  vector<vector<double>> lines;
  vector<double> v;
  for (long i = 0; i < k + 1; ++i) lines.push_back(v);
  for (long i = 0; i < n; ++i) {
    for (long j = 0; j < k + 1; ++j) {
      long next;
      cin >> next;
      lines[j].push_back(next);
    }
  }
  double areas[n];
  for (long i = 0; i < n; ++i) areas[i] = 0.0;
  for (long xcoord = 0; xcoord < k; ++xcoord)
    FillAreas(lines[xcoord], lines[xcoord + 1], areas, n);
  cout << setprecision(12) << fixed;
  for (long i = 0; i < n; ++i) cout << areas[i] << endl;
}
