#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const int inf = 0x3f3f3f3f;
const int Minf = 0x7f7f7f7f;
const long long INF = 0x3f3f3f3f3f3f3f3fll;
const long long MINF = 0x7f7f7f7f7f7f7f7fll;
const int N = 81;
int dcmp(double x) {
  if (x > eps) return 1;
  if (x < -eps) return -1;
  return 0;
}
int dcmp(double x, double y) { return dcmp(x - y); }
int n;
int l[N], r[N], vis[N];
double pl(int i, int y) {
  if (y < l[i]) return 0.0;
  if (y > r[i]) return 1.0;
  return 1.0 * (y - l[i]) / (r[i] - l[i]);
}
double pg(int i, int y) { return 1.0 - pl(i, y); }
double p(int x, int l, int r) { return pl(x, r) - pl(x, l); }
double f[11][N][N];
double g[N][N];
double S[N][N][N];
double ans[N][N];
vector<int> poi;
int now;
void trans(int lst, int c) {
  for (int rl = (0); rl <= n; ++rl)
    for (int rg = (0); rg <= n - rl; ++rg) {
      if (dcmp(f[lst][rl][rg], 0) == 0) continue;
      g[rl][rg] += f[lst][rl][rg] * p(c, poi[now], poi[now + 1]);
      g[rl + 1][rg] += f[lst][rl][rg] * pl(c, poi[now]);
      g[rl][rg + 1] += f[lst][rl][rg] * pg(c, poi[now + 1]);
    }
  for (int rl = (0); rl <= n; ++rl)
    for (int rg = (0); rg <= n - rl; ++rg) {
      f[lst][rl][rg] = g[rl][rg];
      g[rl][rg] = 0.0;
    }
}
void divide(int dep, int l, int r) {
  if (l == r) {
    for (int rl = (0); rl <= n; ++rl)
      for (int rg = (0); rg <= n - rl; ++rg)
        S[l][rl][rg] += f[dep][rl][rg] * p(l, poi[now], poi[now + 1]);
    return;
  }
  int mid = (l + r) >> 1;
  for (int rl = (0); rl <= n; ++rl)
    for (int rg = (0); rg <= n - rl; ++rg) f[dep + 1][rl][rg] = f[dep][rl][rg];
  for (int i = (l); i <= mid; ++i) trans(dep + 1, i);
  divide(dep + 1, mid + 1, r);
  for (int rl = (0); rl <= n; ++rl)
    for (int rg = (0); rg <= n - rl; ++rg) f[dep + 1][rl][rg] = f[dep][rl][rg];
  for (int i = (mid + 1); i <= r; ++i) trans(dep + 1, i);
  divide(dep + 1, l, mid);
}
int main() {
  scanf("%d", &n);
  for (int i = (1); i <= n; ++i)
    scanf("%d%d", &l[i], &r[i]), poi.push_back(l[i]), poi.push_back(r[i]);
  sort(poi.begin(), poi.end());
  int m = unique(poi.begin(), poi.end()) - poi.begin();
  f[0][0][0] = 1;
  for (int j = (0); j < m - 1; ++j) {
    now = j;
    divide(0, 1, n);
  }
  for (int i = (1); i <= n; ++i) {
    for (int rl = (0); rl <= n; ++rl)
      for (int rg = (0); rg <= n - rl; ++rg)
        for (int k = (rl + 1); k <= n - rg; ++k)
          ans[i][k] += S[i][rl][rg] / (n - rg - rl);
    for (int j = (1); j <= n; ++j) printf("%.12f%c", ans[i][j], " \n"[j == n]);
  }
}
