#include <bits/stdc++.h>
using namespace std;
const int N = 85;
const double eps = 1e-9;
int n, ct;
int l[N], r[N], b[N << 1];
double f[2][N][N], ans[N][N];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++)
    scanf("%d%d", &l[i], &r[i]), b[++ct] = l[i], b[++ct] = r[i];
  sort(b + 1, b + ct + 1);
  ct = unique(b + 1, b + ct + 1) - b - 1;
  for (int i = 1; i <= n; i++)
    l[i] = lower_bound(b + 1, b + ct + 1, l[i]) - b,
    r[i] = lower_bound(b + 1, b + ct + 1, r[i]) - b;
  for (int i = 1; i <= n; i++) {
    for (int x = l[i]; x < r[i]; x++) {
      double gg = 1.0 * (b[x + 1] - b[x]) / (b[r[i]] - b[l[i]]);
      for (int x1 = 0; x1 <= n; x1++)
        for (int x2 = 0; x2 <= n; x2++) f[0][x1][x2] = f[1][x1][x2] = 0;
      int now = 0;
      f[0][0][0] = 1;
      for (int j = 1; j <= n; j++)
        if (j != i) {
          now = !now;
          double L = b[l[j]], R = b[r[j]];
          if (R <= b[x]) {
            for (int x1 = 0; x1 < j; x1++)
              for (int x2 = 0; x2 + x1 < j; x2++)
                if (f[!now][x1][x2] > eps) {
                  double tmp = f[!now][x1][x2];
                  f[!now][x1][x2] = 0;
                  f[now][x1 + 1][x2] += tmp;
                }
          } else if (L > b[x]) {
            for (int x1 = 0; x1 < j; x1++)
              for (int x2 = 0; x2 + x1 < j; x2++)
                if (f[!now][x1][x2] > eps) {
                  double tmp = f[!now][x1][x2];
                  f[!now][x1][x2] = 0;
                  f[now][x1][x2] += tmp;
                }
          } else {
            double p1 = 1.0 * (b[x] - L) / (R - L),
                   p2 = 1.0 * (b[x + 1] - b[x]) / (R - L),
                   p3 = 1.0 * (R - b[x + 1]) / (R - L);
            for (int x1 = 0; x1 < j; x1++)
              for (int x2 = 0; x2 + x1 < j; x2++)
                if (f[!now][x1][x2] > eps) {
                  double tmp = f[!now][x1][x2];
                  f[!now][x1][x2] = 0;
                  f[now][x1 + 1][x2] += tmp * p1;
                  f[now][x1][x2 + 1] += tmp * p2;
                  f[now][x1][x2] += tmp * p3;
                }
          }
        }
      for (int x1 = 0; x1 < n; x1++)
        for (int x2 = 0; x2 + x1 < n; x2++) {
          double tmp = f[now][x1][x2], p2 = 1.0 / (x2 + 1);
          for (int k = 0; k <= x2; k++) ans[i][x1 + k + 1] += gg * tmp * p2;
        }
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) printf("%.10lf ", ans[i][j]);
    puts("");
  }
}
