#include <bits/stdc++.h>
using namespace std;
const int MAXN = 205;
int N, l[MAXN], r[MAXN], L[MAXN], R[MAXN], a[MAXN * 2], al;
vector<int> in[MAXN], out[MAXN];
double ans[MAXN][MAXN], dd[MAXN];
struct poly {
  double F[MAXN][MAXN];
  int siz;
  void clear() {
    for (int i = 0; i <= siz; ++i)
      for (int j = 0; j <= siz; ++j) F[i][j] = 0;
    siz = 0, F[0][0] = 1;
  }
  void Mul(double B, double C, double D) {
    for (int i = siz; i >= 0; --i)
      for (int j = siz; j >= 0; --j) {
        F[i + 1][j] += B * F[i][j];
        F[i][j + 1] += C * F[i][j];
        F[i][j] *= D;
      }
    ++siz;
  }
  void print() {
    for (int i = 0; i <= siz; ++i) {
      for (int j = 0; j <= siz; ++j) cout << F[i][j] << ' ';
      cout << endl;
    }
  }
} T;
bool buc[MAXN];
int main() {
  cin >> N;
  for (int i = 1; i <= N; ++i)
    cin >> l[i] >> r[i], ++l[i], ++r[i], a[++al] = l[i], a[++al] = r[i];
  sort(a + 1, a + al + 1);
  al = unique(a + 1, a + al + 1) - (a + 1);
  for (int i = 1; i <= N; ++i) {
    L[i] = lower_bound(a + 1, a + al + 1, l[i]) - a,
    R[i] = lower_bound(a + 1, a + al + 1, r[i]) - a;
    in[L[i]].push_back(i), out[R[i]].push_back(i);
  }
  int cnt = 0;
  for (int i = 1; i < al; ++i) {
    for (int j = 0; j < in[i].size(); ++j) buc[in[i][j]] = 1;
    for (int j = 1; j <= N; ++j)
      if (buc[j]) {
        T.clear();
        for (int k = 1; k <= N; ++k)
          if (buc[k] && k != j) {
            T.Mul((double)(a[i] - l[k]) / (r[k] - l[k]),
                  (double)(a[i + 1] - a[i]) / (r[k] - l[k]),
                  (double)(r[k] - a[i + 1]) / (r[k] - l[k]));
          }
        double sum = 0;
        for (int aa = 0; aa <= T.siz; ++aa) {
          for (int b = 0; b <= T.siz; ++b) {
            dd[cnt + aa + 1] += T.F[aa][b] / (b + 1);
            dd[cnt + aa + b + 2] -= T.F[aa][b] / (b + 1);
          }
        }
        for (int k = 1; k <= N; ++k)
          dd[k] += dd[k - 1],
              ans[j][k] += dd[k] * (a[i + 1] - a[i]) / (r[j] - l[j]);
        for (int k = 1; k <= N; ++k) dd[k] = 0;
      }
    for (int j = 0; j < out[i + 1].size(); ++j) buc[out[i + 1][j]] = 0, ++cnt;
  }
  for (int i = 1; i <= N; ++i) {
    for (int j = 1; j <= N; ++j) cout << ans[i][j] << ' ';
    cout << endl;
  }
  return 0;
}
