#include <bits/stdc++.h>
using namespace std;
const int N = 81;
const double eps = 1e-10;
double dp[10][N][N], f[N][N], ans[N][N], p1[N], p2[N], p3[N];
int n, m, a[N * 2], mp[N * 2], pp[N * 2], tot[N], p[N];
int sl, sn;
bool cmpr(int i, int j) { return a[i] < a[j]; }
int Hash() {
  for (int i = 0; i < n * 2; i++) pp[i] = i;
  sort(pp, pp + n * 2, cmpr);
  int K = 1;
  mp[K] = a[pp[0]];
  for (int i = 0; i < n * 2; i++) {
    if (mp[K] != a[pp[i]]) mp[++K] = a[pp[i]];
    a[pp[i]] = K;
  }
  return K;
}
inline void deal(int s, int k) {
  int i, j, kk;
  memset(dp[k], 0, sizeof(dp[k]));
  dp[k][0][0] = 1;
  p[k] = tot[k] = 0;
  for (i = 0; i < n; ++i) {
    if (i / sl == k) continue;
    if (a[i * 2 + 1] <= s) {
      tot[k]++;
    } else if (a[i * 2] <= s) {
      for (j = p[k]; j >= 0; --j)
        for (kk = p[k] - j; kk >= 0; --kk) {
          dp[k][j][kk + 1] += dp[k][j][kk] * (mp[s + 1] - mp[s]) /
                              (mp[a[i * 2 + 1]] - mp[a[i * 2]]);
          dp[k][j + 1][kk] += dp[k][j][kk] * (mp[s] - mp[a[i * 2]]) /
                              (mp[a[i * 2 + 1]] - mp[a[i * 2]]);
          dp[k][j][kk] = dp[k][j][kk] * (mp[a[i * 2 + 1]] - mp[s + 1]) /
                         (mp[a[i * 2 + 1]] - mp[a[i * 2]]);
        }
      p[k]++;
    }
  }
}
inline void work(int s, int k) {
  int id = k / sl, i, j, kk;
  memcpy(f, dp[id], sizeof(f));
  int np = p[id], ntot = tot[id];
  for (i = min(sl * id + sl - 1, n - 1); i >= sl * id; --i) {
    if (i == k) continue;
    if (a[i * 2 + 1] <= s) {
      ntot++;
    } else if (a[i * 2] <= s) {
      for (j = np; j >= 0; --j)
        for (kk = np - j; kk >= 0; --kk) {
          f[j][kk + 1] += f[j][kk] * p2[i];
          f[j + 1][kk] += f[j][kk] * p1[i];
          f[j][kk] = f[j][kk] * p3[i];
        }
      np++;
    }
  }
  for (j = 0; j <= np; ++j)
    for (kk = np - j; kk >= 0; --kk) {
      ans[k][ntot + j] += f[j][kk] * (mp[s + 1] - mp[s]) / (kk + 1);
      ans[k][ntot + j + kk + 1] -= f[j][kk] * (mp[s + 1] - mp[s]) / (kk + 1);
    }
}
inline void solve(int s) {
  for (int i = 0; i < n; i++)
    if (a[i * 2] <= s && a[i * 2 + 1] > s) {
      p1[i] =
          (double)(mp[s] - mp[a[i * 2]]) / (mp[a[i * 2 + 1]] - mp[a[i * 2]]);
      p2[i] = (double)(mp[s + 1] - mp[s]) / (mp[a[i * 2 + 1]] - mp[a[i * 2]]);
      p3[i] = (double)(mp[a[i * 2 + 1]] - mp[s + 1]) /
              (mp[a[i * 2 + 1]] - mp[a[i * 2]]);
    }
  for (int i = 0; i < sn; ++i) deal(s, i);
  for (int i = 0; i < n; ++i)
    if (a[i * 2] <= s && a[i * 2 + 1] > s) work(s, i);
}
int main() {
  while (scanf("%d", &n) != EOF) {
    int i, j, k;
    for (i = 0; i < n; i++) scanf("%d%d", &a[i * 2], &a[i * 2 + 1]);
    m = Hash();
    for (i = 0; i <= n; ++i)
      for (j = 0; j <= n; ++j) ans[i][j] = 0;
    sl = (int)sqrt((double)n);
    sn = (n + sl - 1) / sl;
    for (i = 1; i < m; ++i) solve(i);
    for (i = 0; i < n; ++i) {
      for (j = 0; j < n; ++j) {
        printf("%.10f ", ans[i][j] / (mp[a[i * 2 + 1]] - mp[a[i * 2]]));
        ans[i][j + 1] += ans[i][j];
      }
      puts("");
    }
  }
  return 0;
}
