#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 80;
int le[MAX_N + 10], ri[MAX_N + 10];
int po[MAX_N * 2 + 10], pn, n;
double p[MAX_N + 10], f[MAX_N + 10][MAX_N + 10];
void work(int cur, int l, int r) {
  int c = 0;
  memset(f, 0, sizeof(f));
  f[0][0] = 1.0;
  for (int i = 1; i <= n; i++) {
    if (i == cur || le[i] >= r) continue;
    if (ri[i] <= l) {
      ++c;
      continue;
    }
    double L = (double)(l - le[i]) / (ri[i] - le[i]);
    double M = (double)(r - l) / (ri[i] - le[i]);
    double R = 1.0 - L - M;
    for (int j = i; j >= 0; j--) {
      for (int k = i - j; k >= 0; k--) {
        f[j + 1][k] += f[j][k] * L;
        f[j][k + 1] += f[j][k] * M;
        f[j][k] *= R;
      }
    }
  }
  double pp = (double)(r - l) / (ri[cur] - le[cur]);
  for (int i = 0; i + c <= n; i++)
    for (int j = 0; i + j + c <= n; j++) {
      p[i + c + 1] += f[i][j] / (j + 1) * pp;
      p[i + c + j + 2] -= f[i][j] / (j + 1) * pp;
    }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", le + i, ri + i);
    po[pn++] = le[i];
    po[pn++] = ri[i];
  }
  sort(po, po + pn);
  pn = unique(po, po + pn) - po;
  for (int i = 1; i <= n; i++) {
    memset(p, 0, sizeof(p));
    for (int j = 0; j < pn - 1; j++)
      if (le[i] <= po[j] && ri[i] >= po[j + 1]) work(i, po[j], po[j + 1]);
    for (int j = 1; j <= n; j++) {
      p[j] += p[j - 1];
      printf("%.10f ", p[j]);
    }
    printf("\n");
  }
  return 0;
}
