#include <bits/stdc++.h>
using namespace std;
int read() {
  char ch = getchar();
  int x = 0, ff = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') ff = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return x * ff;
}
int n, tot, cnt;
int l[85], r[85];
double val[165];
double f[2][85][85], ans[85][165];
struct node {
  int zhi, id;
} shu[165];
bool cmp(node aa, node bb) { return aa.zhi < bb.zhi; }
int main() {
  n = read();
  for (int i = 1; i <= n; ++i) {
    l[i] = read(), r[i] = read();
    shu[++tot] = ((node){l[i], i << 1});
    shu[++tot] = ((node){r[i], i << 1 | 1});
  }
  sort(shu + 1, shu + tot + 1, cmp);
  shu[0].zhi = shu[1].zhi - 1;
  for (int i = 1; i <= tot; ++i) {
    if (shu[i].zhi != shu[i - 1].zhi) val[++cnt] = shu[i].zhi;
    if (shu[i].id & 1)
      r[shu[i].id >> 1] = cnt;
    else
      l[shu[i].id >> 1] = cnt;
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = l[i]; j < r[i]; ++j) {
      int now = 1;
      f[now][0][0] = 1;
      double tmp = (val[j + 1] - val[j]) / (val[r[i]] - val[l[i]]);
      for (int k = 1; k <= n; ++k)
        if (k != i && l[k] <= j) {
          now ^= 1;
          double p1 = (j > l[k] ? (val[min(j, r[k])] - val[l[k]]) /
                                      (val[r[k]] - val[l[k]])
                                : 0);
          double p2 = (j >= l[k] && j < r[k]
                           ? (val[j + 1] - val[j]) / (val[r[k]] - val[l[k]])
                           : 0);
          double p3 = (j < r[k] ? (val[r[k]] - val[max(j + 1, l[k])]) /
                                      (val[r[k]] - val[l[k]])
                                : 0);
          for (int x = 0; x <= k; ++x)
            for (int y = 0; y <= k - x; ++y)
              if (f[now ^ 1][x][y] > 0) {
                f[now][x + 1][y] += f[now ^ 1][x][y] * p1;
                f[now][x][y + 1] += f[now ^ 1][x][y] * p2;
                f[now][x][y] += f[now ^ 1][x][y] * p3;
                f[now ^ 1][x][y] = 0;
              }
        }
      for (int x = 0; x < n; ++x)
        for (int y = 0; y < n - x; ++y)
          if (f[now][x][y]) {
            double fm = 1. / (y + 1);
            ans[i][x] += fm * f[now][x][y] * tmp;
            ans[i][x + y + 1] -= fm * f[now][x][y] * tmp;
            f[now][x][y] = 0;
          }
    }
    for (int x = 1; x < n; ++x) ans[i][x] += ans[i][x - 1];
  }
  for (int i = 1; i <= n; ++i, puts(""))
    for (int j = 0; j < n; ++j) {
      printf("%.6lf ", ans[i][j]);
    }
  return 0;
}
