#include <bits/stdc++.h>
using namespace std;
int n, l[210], r[210], a[210], b[210];
double dp[210][210], ans[210][210], now[210], lst[210];
inline int read() {
  int x = 0;
  char ch = getchar();
  while (!isdigit(ch)) ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
  return x;
}
int main() {
  int n = read(), cnt = 0;
  for (int i = 1; i <= n; i++) {
    a[++cnt] = l[i] = read(), a[++cnt] = r[i] = read();
  }
  sort(a + 1, a + cnt + 1);
  cnt = unique(a + 1, a + cnt + 1) - a - 1;
  for (int t = 1; t <= cnt - 1; t++) {
    for (int i = 1; i <= n; i++) {
      double L = a[t], R = a[t + 1];
      if (!(l[i] >= R || r[i] <= L)) {
        for (int j = 0; j <= n; j++)
          for (int k = 0; k <= n; k++) dp[j][k] = 0;
        dp[0][0] = 1;
        int tot = 0, tot2 = 0;
        for (int k = 1; k <= n; k++)
          if (l[k] >= R || r[k] <= L)
            now[k] = 0, tot2 += r[k] <= L;
          else
            now[k] = (R - L) / (r[k] - l[k]), b[tot++] = k;
        for (int k = 0; k <= tot - 1; k++) {
          int u = b[k];
          if (u == i) continue;
          for (int x = k + 1; x >= 0; x--)
            for (int y = k + 1 - x; y >= 0; y--) {
              dp[x + 1][y] += dp[x][y] * lst[u];
              dp[x][y + 1] += dp[x][y] * now[u];
              dp[x][y] *= 1.0 - now[u] - lst[u];
            }
        }
        for (int k = 0; k <= tot - 1; k++)
          for (int x = 0; x <= tot - 1 - k; x++) {
            ans[i][tot2 + k] += dp[k][x] * now[i] / (1 + x);
            ans[i][tot2 + k + x + 1] -= dp[k][x] * now[i] / (1 + x);
          }
      }
    }
    for (int i = 1; i <= n; i++) lst[i] += now[i];
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= n - 1; j++) {
      if (j) ans[i][j] += ans[i][j - 1];
      printf("%.12lf ", ans[i][j]);
    }
    putchar('\n');
  }
  return 0;
}
