#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int maxn = 310;
const long long mod = 1e9 + 7;
long long pw(long long a, long long b, long long md = mod) {
  long long res = 1;
  while (b) {
    if (b & 1) {
      res = (a * res) % md;
    }
    a = (a * a) % md;
    b >>= 1;
  }
  return (res);
}
int n, k;
int a[maxn];
struct ch {
  set<pair<long double, long double> > coord;
  long double add_line(long double l, long double r) {
    if (coord.empty()) {
      coord.insert({0, l});
      coord.insert({1, r});
      return (l + r) / 2.0;
    }
    vector<pair<long double, long double> > add, del;
    long double ans = 0;
    auto cur = coord.begin();
    while (next(cur) != coord.end()) {
      long double L = cur->first;
      long double R = next(cur)->first;
      long double nowl = l + (r - l) * L;
      long double nowr = l + (r - l) * R;
      if (nowl <= cur->second and nowr <= next(cur)->second) {
        ans += 0;
      } else if (nowl > cur->second and nowr > next(cur)->second) {
        long double a1 = (nowl + nowr) / 2.0 * (R - L);
        long double a2 = (cur->second + next(cur)->second) / 2.0 * (R - L);
        ans += a1 - a2;
        del.push_back(*cur);
        del.push_back(*next(cur));
      } else if (nowl <= cur->second and nowr > next(cur)->second) {
        long double bsl = L, bsr = R;
        for (int i = 0; i < 100; i++) {
          long double mid = (bsl + bsr) / 2.0;
          long double h1 = nowl + (nowr - nowl) * ((mid - L) / (R - L));
          long double h2 = cur->second + (next(cur)->second - cur->second) *
                                             ((mid - L) / (R - L));
          if (h1 <= h2)
            bsl = mid;
          else
            bsr = mid;
        }
        long double a1 =
            (nowr + nowl + (nowr - nowl) * ((bsl - L) / (R - L))) / 2.0;
        long double a2 =
            (next(cur)->second + cur->second +
             (next(cur)->second - cur->second) * ((bsl - L) / (R - L))) /
            2.0;
        ans += (a1 - a2) * (R - bsl);
        del.push_back(*next(cur));
        add.push_back({bsl, nowl + (nowr - nowl) * ((bsl - L) / (R - L))});
      } else if (nowl > cur->second and nowr <= next(cur)->second) {
        long double bsl = L, bsr = R;
        for (int i = 0; i < 100; i++) {
          long double mid = (bsl + bsr) / 2.0;
          long double h1 = nowl + (nowr - nowl) * ((mid - L) / (R - L));
          long double h2 = cur->second + (next(cur)->second - cur->second) *
                                             ((mid - L) / (R - L));
          if (h1 >= h2)
            bsl = mid;
          else
            bsr = mid;
        }
        long double a1 =
            (nowl + nowl + (nowr - nowl) * ((bsl - L) / (R - L))) / 2.0;
        long double a2 =
            (cur->second + cur->second +
             (next(cur)->second - cur->second) * ((bsl - L) / (R - L))) /
            2.0;
        ans += (a1 - a2) * (bsl - L);
        del.push_back(*cur);
        add.push_back({bsl, nowl + (nowr - nowl) * ((bsl - L) / (R - L))});
      } else {
        cout << "This is why I hate geometry", exit(0);
      }
      cur = next(cur);
    }
    for (auto x : del)
      if (coord.count(x)) coord.erase(x);
    for (auto x : add) coord.insert(x);
    if (coord.empty()) coord.insert({0, l}), coord.insert({1, r});
    if (coord.begin()->first > 0) coord.insert({0, l});
    if (coord.rbegin()->first < 1) coord.insert({1, r});
    return ans;
  }
} block[maxn];
long double solve() {
  long double ans = 0;
  for (int i = 0; i < k; i++) ans += block[i].add_line(a[i], a[i + 1]);
  return ans;
}
int32_t main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> k;
  while (n--) {
    for (int i = 0; i <= k; i++) cin >> a[i];
    cout << fixed << setprecision(12) << solve() << '\n';
  }
  return (0);
}
