#include <bits/stdc++.h>
using namespace std;
static const int INF = 500000000;
template <class T>
void debug(T a, T b) {
  for (; a != b; ++a) cerr << *a << ' ';
  cerr << endl;
}
int n, m;
double res[100][100][100];
double ans[100][100];
int who[100];
int shift;
pair<int, int> range[100];
int zip[200], zn;
double lp[100], cp[100], rp[100];
void calc(int l, int r, double nxt[100][100], const double dp[100][100]) {
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j) nxt[i][j] = 0;
  double tmp[100][100];
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j) tmp[i][j] = dp[i][j];
  for (int i = l; i < r; ++i) {
    for (int j = 0; j < n + 1; ++j)
      for (int k = 0; k < n + 1; ++k) nxt[j][k] = 0;
    for (int j = 0; j < n; ++j)
      for (int k = 0; k < n; ++k)
        if (tmp[j][k] > 1e-20) {
          double p = tmp[j][k];
          nxt[j][k] += p * lp[i];
          nxt[j + 1][k] += p * cp[i];
          nxt[j][k + 1] += p * rp[i];
        }
    for (int j = 0; j < n + 1; ++j)
      for (int k = 0; k < n + 1; ++k) tmp[j][k] = nxt[j][k];
  }
}
void rec(int l, int r, double dp[100][100]) {
  if (r - l == 1) {
    for (int i = 0; i < n + 1; ++i)
      for (int j = 0; j < n + 1; ++j) {
        int rest = m - 1 - i - j;
        if (rest + shift >= 0) res[who[l]][rest + shift][i] += dp[i][j] * cp[l];
      }
    return;
  }
  double nxt[100][100];
  int md = (l + r) >> 1;
  calc(md, r, nxt, dp);
  rec(l, md, nxt);
  calc(l, md, nxt, dp);
  rec(md, r, nxt);
}
void solve(int l, int r) {
  m = shift = 0;
  for (int i = 0; i < n; ++i) {
    if (range[i].first <= l && r <= range[i].second) {
      double len = range[i].second - range[i].first;
      double L = min(1.0, max(0, l - range[i].first) / len),
             R = min(1.0, max(0, range[i].second - r) / len), mid = 1 - L - R;
      lp[m] = L;
      cp[m] = mid;
      rp[m] = R;
      who[m] = i;
      ++m;
    } else if (range[i].second <= l)
      ++shift;
  }
  if (m == 0) return;
  double dp[100][100] = {0};
  dp[0][0] = 1;
  rec(0, m, dp);
}
int main() {
  cin >> n;
  for (int i = 0; i < n; ++i) {
    cin >> range[i].first >> range[i].second;
    zip[i * 2] = range[i].first;
    zip[i * 2 + 1] = range[i].second;
  }
  sort(zip, zip + n * 2);
  zn = unique(zip, zip + n * 2) - zip;
  for (int i = 0; i < zn - 1; ++i) solve(zip[i], zip[i + 1]);
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j)
      for (int k = 0; k < n; ++k)
        for (int l = 0; l < k + 1; ++l) ans[i][j + l] += res[i][j][k] / (k + 1);
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j)
      printf("%.10f%c", ans[i][j], j == n - 1 ? '\n' : ' ');
  return 0;
}
