#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:66777216")
using namespace std;
const long double eps = 1e-8;
struct pt {
  long double x, y;
  pt(long double x = 0.0, long double y = 0.0) : x(x), y(y) {}
};
pt getPt(pt A, pt B, long double midx) {
  long double dx = B.x - A.x;
  long double dy = B.y - A.y;
  return pt(midx, (midx - A.x) * dy / dx + A.y);
}
long double getArea(vector<pt> &p) {
  long double s = 0.0;
  for (int i = 1; i < (int)(p).size(); ++i)
    s += (p[i].x - p[i - 1].x) * (p[i].y + p[i - 1].y) / 2.0;
  return s;
}
int getPos(vector<pt> &A, long double x) {
  int l = 1;
  int r = (int)(A).size() - 1;
  while (l < r) {
    int m = (l + r) / 2;
    if (x > A[m - 1].x - eps && x < A[m].x + eps) return m;
    if (x > A[m].x)
      l = m + 1;
    else
      r = m - 1;
  }
  return l;
}
pt getIntersection(pt &A, pt &B, pt &C, pt &D) {
  long double a1 = B.y - A.y;
  long double b1 = A.x - B.x;
  long double c1 = B.x * A.y - A.x * B.y;
  long double a2 = D.y - C.y;
  long double b2 = C.x - D.x;
  long double c2 = D.x * C.y - C.x * D.y;
  long double det = a1 * b2 - a2 * b1;
  long double detx = b1 * c2 - b2 * c1;
  long double dety = a2 * c1 - c2 * a1;
  return pt(detx / det, dety / det);
}
int sgn(long double x) {
  if (fabsl(x) < eps) return 0;
  return x > 0.0 ? 1 : -1;
}
vector<pt> merge(vector<pt> &A, vector<pt> &B) {
  vector<pt> BB;
  int n = (int)(A).size();
  for (int i = 0; i < n; ++i) {
    long double x = A[i].x;
    int pos = getPos(B, x);
    BB.push_back(getPt(B[pos - 1], B[pos], x));
  }
  vector<pt> ret;
  int s = sgn(A[0].y - BB[0].y);
  if (s == 1)
    ret.push_back(A[0]);
  else
    ret.push_back(BB[0]);
  for (int i = 1; i < n; ++i) {
    int s1 = sgn(A[i - 1].y - BB[i - 1].y);
    int s2 = sgn(A[i].y - BB[i].y);
    if (s1 * s2 == -1)
      ret.push_back(getIntersection(A[i - 1], A[i], BB[i - 1], BB[i]));
    if (s2 == 1)
      ret.push_back(A[i]);
    else
      ret.push_back(BB[i]);
  }
  return ret;
}
int main() {
  int n, k;
  cin >> n >> k;
  vector<pt> cur;
  for (int i = 0; i < n; ++i) {
    vector<pt> now;
    for (int j = 0; j <= k; ++j) {
      int y;
      cin >> y;
      now.push_back(pt(j, y));
    }
    long double curS = i ? getArea(cur) : 0.0;
    if (i)
      cur = merge(cur, now);
    else
      cur = now;
    cout << fixed << setprecision(9) << getArea(cur) - curS << endl;
  }
  return 0;
}
