#include <bits/stdc++.h>
using namespace std;
int S, l[100], r[100], N, w[200];
double a[100], b[100], f[100][100], ans[100];
void init() {
  scanf("%d", &N);
  for (int i = 1; i <= N; i++)
    scanf("%d%d", &l[i], &r[i]), w[++S] = l[i], w[++S] = r[i];
}
void calc(int p, int L, int R) {
  int t = 0, bg = 0;
  memset(f, 0, sizeof(f)), f[0][0] = 1.0 * (R - L) / (r[p] - l[p]);
  for (int i = 1; i <= N; i++)
    if (i != p) {
      double s = r[i] - l[i], x, y;
      if (r[i] <= L) {
        bg++;
        continue;
      } else if (R <= l[i])
        continue;
      else
        x = (L - l[i]) / s, y = (R - L) / s;
      t++;
      for (int j = t; j >= 0; j--)
        for (int k = t - j; k >= 0; k--) {
          f[j][k] *= 1 - x - y;
          if (j) f[j][k] += f[j - 1][k] * x;
          if (k) f[j][k] += f[j][k - 1] * y;
        }
    }
  for (int i = 0; i + bg < N; i++)
    for (int j = 0; i + bg + j < N; j++)
      ans[i + bg + 1] += f[i][j] / (j + 1),
          ans[i + bg + j + 2] -= f[i][j] / (j + 1);
}
void doit() {
  sort(w + 1, w + S + 1);
  for (int i = 1; i <= N; i++) {
    memset(ans, 0, sizeof(ans));
    for (int j = 1; j <= S; j++)
      if ((j == 1 || w[j] != w[j - 1]) && l[i] <= w[j - 1] && w[j] <= r[i])
        calc(i, w[j - 1], w[j]);
    for (int j = 1; j <= N; j++)
      printf("%.9lf%c", ans[j] += ans[j - 1], j == N ? '\n' : ' ');
  }
}
int main() {
  init();
  doit();
  return 0;
}
