#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300;
const int MAXY = 1001;
const double EPS = 1e-9;
vector<pair<double, double> > v[MAXN];
int n, k;
template <typename T>
T abs(T x) {
  return x < 0 ? -x : x;
}
void getabc(double x1, double y1, double x2, double y2, double &a, double &b,
            double &c) {
  a = y2 - y1;
  b = x1 - x2;
  c = -(a * x1 + b * y1);
}
double sign(double x1, double y1, double x2, double y2, double x3, double y3,
            double x4, double y4) {
  double a, b, c;
  getabc(x1, y1, x2, y2, a, b, c);
  return (a * x3 + b * y3 + c) * (a * x4 + b * y4 + c);
}
double add(vector<pair<double, double> > &v, double x1, double y1, double x2,
           double y2) {
  vector<pair<double, double> > a;
  bool opened = false;
  for (size_t i = 0; i < v.size(); ++i) {
  }
  for (size_t i = 1; i < v.size(); ++i) {
    double sf = sign(v[i - 1].first, v[i - 1].second, v[i].first, v[i].second,
                     x1, y1, x2, y2);
    double ss = sign(x1, y1, x2, y2, v[i - 1].first, v[i - 1].second,
                     v[i].first, v[i].second);
    if (!opened) {
      a.push_back(v[i - 1]);
    }
    if (sf < EPS && ss < EPS) {
      double a1, b1, c1, a2, b2, c2;
      getabc(x1, y1, x2, y2, a1, b1, c1);
      getabc(v[i - 1].first, v[i - 1].second, v[i].first, v[i].second, a2, b2,
             c2);
      double d = a1 * b2 - a2 * b1;
      if (abs(d) < EPS) {
        continue;
      }
      double x = (b1 * c2 - b2 * c1) / d + 0;
      double y = (a2 * c1 - a1 * c2) / d + 0;
      if (abs(x - v[i].first) < EPS && abs(y - v[i].second) < EPS) {
        continue;
      }
      if (!(abs(x - v[i - 1].first) < EPS && abs(y - v[i - 1].second) < EPS) ||
          opened) {
        a.push_back(make_pair(x, y));
      }
      opened = !opened;
    }
  }
  a.push_back(v[v.size() - 1]);
  if (opened) {
    return 0;
  }
  double res = 0;
  for (size_t i = 1; i < v.size(); ++i) {
    res -= (v[i].first - v[i - 1].first) * (v[i].second + v[i - 1].second);
  }
  v.swap(a);
  for (size_t i = 1; i < v.size(); ++i) {
    res += (v[i].first - v[i - 1].first) * (v[i].second + v[i - 1].second);
  }
  res /= 2;
  for (size_t i = 0; i < v.size(); ++i) {
  }
  return res;
}
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 0; i < k; ++i) {
    v[i].push_back(make_pair(0, MAXY));
    v[i].push_back(make_pair(0, 0));
    v[i].push_back(make_pair(1, 0));
    v[i].push_back(make_pair(1, MAXY));
  }
  for (int i = 0; i < n; ++i) {
    int y[k + 1];
    for (int j = 0; j <= k; ++j) scanf("%d", &y[j]);
    double ans = 0;
    for (int j = 0; j < k; ++j) {
      ans += add(v[j], 0, y[j], 1, y[j + 1]);
    }
    printf("%.7lf\n", (double)ans);
  }
  return 0;
}
