#include <bits/stdc++.h>
using namespace std;
const double eps(1e-8);
int n;
int l[82], r[82];
vector<int> w;
double Big[82], Small[82], Equal[82];
int main() {
  scanf("%d", &n);
  w.clear();
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &l[i], &r[i]);
    w.push_back(l[i]), w.push_back(r[i]);
  }
  sort(w.begin(), w.end());
  for (int i = 0; i < n; i++) {
    double p[82][82] = {0};
    for (int j = 1; j < (int)w.size(); j++)
      if (w[j] != w[j - 1] && l[i] <= w[j - 1] && w[j] <= r[i]) {
        double f[82][82] = {0};
        int cnt = 0, t = 0;
        for (int k = 0; k < n; k++)
          if (i != k) {
            if (l[k] <= w[j - 1] && w[j] <= r[k]) {
              Big[t] = (double)(w[j - 1] - l[k]) / (r[k] - l[k]);
              Small[t] = (double)(r[k] - w[j]) / (r[k] - l[k]);
              Equal[t] = 1 - Big[t] - Small[t];
              t++;
            } else if (w[j - 1] >= r[k])
              cnt++;
          } else {
            f[0][0] = ((double)w[j] - w[j - 1]) / ((double)r[k] - l[k]);
          }
        for (int k = 0; k < t; k++)
          for (int a = k + 1; a >= 0; a--)
            for (int b = k + 1 - a; b >= 0; b--) {
              f[a][b] *= Small[k];
              if (a) f[a][b] += f[a - 1][b] * Big[k];
              if (b) f[a][b] += f[a][b - 1] * Equal[k];
            }
        for (int a = 0; a <= n; a++)
          for (int b = 0; b <= n; b++)
            if (a + cnt <= n) p[a + cnt][b] += f[a][b];
      }
    double ans[82] = {0};
    for (int a = 0; a < n; a++)
      for (int b = 0; a + b < n; b++)
        for (int k = 0; k <= b; k++)
          if (a + k < n) ans[a + k] += p[a][b] / (b + 1);
    for (int k = 0; k < n; k++)
      printf("%.10f%c", ans[k], (k == n - 1) ? 10 : ' ');
  }
  return 0;
}
