#include <bits/stdc++.h>
using namespace std;
const int maxn = 80 + 5;
const double eps = 1e-10;
int n;
int l[maxn], r[maxn];
int sz[2 * maxn], sum;
double ans[maxn];
double f[maxn][maxn];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &l[i], &r[i]);
    sz[++sum] = l[i];
    sz[++sum] = r[i];
  }
  sort(sz + 1, sz + sum + 1);
  int j = 1;
  for (int i = 2; i <= sum; i++)
    if (sz[i] != sz[j]) sz[++j] = sz[i];
  sum = j;
  for (int i = 1; i <= n; i++) {
    memset(ans, 0, sizeof(ans));
    for (int j = 1; j < sum; j++)
      if (sz[j] >= l[i] && sz[j + 1] <= r[i]) {
        int xx = 0, pp = 0;
        memset(f, 0, sizeof(f));
        f[0][0] = 1;
        for (int k = 1; k <= n; k++)
          if (k != i && l[k] < sz[j + 1]) {
            if (r[k] <= sz[j])
              pp++;
            else {
              xx++;
              double x1 = 1.0 * (sz[j] - l[k]) / (r[k] - l[k]);
              double x2 = 1.0 * (sz[j + 1] - sz[j]) / (r[k] - l[k]);
              for (int l1 = xx - 1; l1 >= 0; l1--)
                for (int l2 = xx - 1 - l1; l2 >= 0; l2--) {
                  f[l1 + 1][l2] += f[l1][l2] * x1;
                  f[l1][l2 + 1] += f[l1][l2] * x2;
                  f[l1][l2] *= 1 - x1 - x2;
                }
            }
          }
        double qq = 1.0 * (sz[j + 1] - sz[j]) / (r[i] - l[i]);
        for (int ll = xx; ll >= 0; ll--)
          for (int rr = xx - ll; rr >= 0; rr--)
            if (f[ll][rr] > eps)
              for (int k = ll + pp + 1; k <= ll + rr + pp + 1; k++)
                ans[k] += f[ll][rr] / (rr + 1) * qq;
      }
    for (int j = 1; j < n; j++) printf("%.10lf ", ans[j]);
    printf("%.10lf\n", ans[n]);
  }
  return 0;
}
