#include <bits/stdc++.h>
using namespace std;
int N, K;
vector<pair<double, double> > points[602];
double ans[602];
vector<pair<double, double> > p;
double eps = 1e-8;
double two_area(pair<double, double> a, pair<double, double> b) {
  double ymin = min(a.second, b.second);
  double ymax = max(a.second, b.second);
  double x = fabs(a.first - b.first);
  double ans = 0;
  ans = x * ymin;
  ans += (ymax - ymin) * x * (0.5000000000);
  return ans;
}
double area() {
  double ans = 0;
  for (size_t i = 0; i + 1 < p.size(); i++) {
    ans += two_area(p[i], p[i + 1]);
  }
  return ans;
}
bool eq(double a, double b) {
  if (abs(a - b) < eps) return true;
  return false;
}
void merge2(int in) {
  int N = p.size();
  int M = points[in].size();
  vector<pair<double, double> > r;
  int st = 0;
  for (int i = 0; i + 1 < M; i++) {
    double m, c;
    m = (points[in][i + 1].second - points[in][i].second);
    c = points[in][i].second - m * i;
    while (st + 1 < N && !eq(i + 1, p[st].first)) {
      double x1, y1, y2, x2;
      x1 = p[st].first;
      x2 = p[st + 1].first;
      y1 = m * x1 + c;
      y2 = m * x2 + c;
      double o1, o2;
      o1 = p[st].second;
      o2 = p[st + 1].second;
      if (y1 >= o1 - eps && y2 >= o2 - eps) {
        r.push_back(make_pair(x1, y1));
        r.push_back(make_pair(x2, y2));
      } else if (y1 < o1 + eps && y2 < o2 + eps) {
        r.push_back(make_pair(x1, o1));
        r.push_back(make_pair(x2, o2));
      } else {
        double m2, c2;
        m2 = (o2 - o1) / (x2 - x1);
        c2 = o2 - x2 * m2;
        double x = (c2 - c) / (m - m2);
        double y = m * x + c;
        r.push_back(make_pair(x1, max(o1, y1)));
        if (x > x1 && x < x2)
          ;
        r.push_back(make_pair(x, y));
      }
      st++;
    }
  }
  r.push_back(make_pair(K, max(points[in][M - 1].second, p[st].second)));
  p.clear();
  p.push_back(r[0]);
  for (size_t i = 1; i < r.size(); i++) {
    if (eq(p.back().first, r[i].first))
      continue;
    else
      p.push_back(r[i]);
  }
  for (size_t i = 0; i < p.size(); i++) {
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> N >> K;
  for (int i = 0; i < N; i++) {
    for (int j = 0; j <= K; j++) {
      int y;
      cin >> y;
      points[i].push_back(make_pair((double)j, (double)y));
    }
  }
  p = points[0];
  ans[0] = area();
  double u[602];
  u[0] = ans[0];
  for (int i = 1; i < N; i++) {
    merge2(i);
    u[i] = area();
    ans[i] = u[i] - u[i - 1];
  }
  cout << setprecision(15);
  for (int i = 0; i < N; i++) cout << ans[i] << endl;
  return 0;
}
