#include <bits/stdc++.h>
using namespace std;
template <class T>
void debug(T a, T b) {
  ;
}
template <class T>
void chmin(T& a, const T& b) {
  if (a > b) a = b;
}
template <class T>
void chmax(T& a, const T& b) {
  if (a < b) a = b;
}
namespace std {
template <class S, class T>
ostream& operator<<(ostream& out, const pair<S, T>& a) {
  out << '(' << a.first << ',' << a.second << ')';
  return out;
}
}  // namespace std
long long int readL() {
  long long int res;
  scanf("%I64d", &res);
  return res;
}
void printL(long long int res) { printf("%I64d", res); }
int n, k;
int hei[305][305];
int idx[305];
int h1[305], h2[305];
bool cmp(int a, int b) { return (h2[a] - h1[a]) < (h2[b] - h1[b]); }
int pos[305];
bool enable[305];
const double INF = 1e100;
double getX(int p, int q) {
  if (h2[p] - h1[p] == h2[q] - h1[q]) {
    if (h2[p] <= h2[q])
      return -INF;
    else
      return INF;
  }
  int h3 = h1[q] - h1[p], h4 = h2[q] - h2[p];
  return -h3 / (double)(h4 - h3);
}
double res[305];
int stk[305];
int main() {
  cin >> n >> k;
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (k + 1); ++j) scanf("%d", &hei[i][j]);
  for (int i = 0; i < (k); ++i) {
    memset((enable), 0, sizeof(enable));
    for (int j = 0; j < (n); ++j) h1[j] = hei[j][i], h2[j] = hei[j][i + 1];
    for (int j = 0; j < (n); ++j) idx[j] = j;
    sort(idx, idx + n, cmp);
    for (int j = 0; j < (n); ++j) pos[idx[j]] = j;
    for (int j = 0; j < (n); ++j) {
      int cur = j;
      ;
      ;
      int cnt = 0;
      for (int k = 0; k < (n); ++k)
        if (enable[idx[k]]) {
          int who = idx[k];
          while (cnt >= 2) {
            double X = getX(stk[cnt - 1], who),
                   X2 = getX(stk[cnt - 2], stk[cnt - 1]);
            if (X <= X2)
              --cnt;
            else
              break;
          }
          stk[cnt++] = who;
        }
      enable[j] = 1;
      ;
      ;
      if (cnt == 0) {
        res[j] += (h2[cur] + h1[cur]) / 2.0;
      } else {
        for (int k = 0; k < (cnt); ++k) {
          double st = 0, en = 1;
          ;
          ;
          ;
          ;
          ;
          ;
          ;
          ;
          if (k + 1 < cnt) chmin(en, getX(stk[k], stk[k + 1]));
          if (k - 1 >= 0) chmax(st, getX(stk[k - 1], stk[k]));
          if (st <= en) {
            ;
            ;
            ;
            ;
            int h3 = h1[cur] - h1[stk[k]], h4 = h2[cur] - h2[stk[k]];
            double h5 = (h4 * st + h3 * (1 - st)),
                   h6 = (h4 * en + h3 * (1 - en));
            if (h5 >= 0 && h6 >= 0) {
              res[cur] += (h5 + h6) / 2.0 * (en - st);
            } else if (h6 <= 0 && h5 <= 0)
              ;
            else {
              if (h5 < 0) swap(h5, h6);
              res[cur] += h5 * h5 / (h5 - h6) * (en - st) / 2.0;
              ;
            }
          }
        }
      }
    }
  }
  for (int i = 0; i < (n); ++i) printf("%.10f\n", res[i]);
  return 0;
}
