#include <bits/stdc++.h>
using namespace std;
int L[5], R[5], n;
vector<int> aux;
double greater_than(int i, int t) {
  if (R[i] <= t) return 0;
  if (t < L[i]) return 1;
  return (R[i] - t) / (R[i] - L[i] + 1.0);
}
double less_eq(int i, int t) {
  if (t < L[i]) return 0;
  if (R[i] <= t) return 1;
  return (t - L[i] + 1.0) / (R[i] - L[i] + 1.0);
}
double eq(int i, int t) {
  if (L[i] <= t && t <= R[i])
    return 1.0 / (R[i] - L[i] + 1.0);
  else
    return 0;
}
double less_than(int i, int t) {
  if (t <= L[i]) return 0;
  if (R[i] < t) return 1;
  return (t - L[i]) / (R[i] - L[i] + 1.0);
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < (n); i++) scanf("%d %d", L + i, R + i);
  double ans = 0;
  for (int t = (1); t <= (10000); t++) {
    for (int msk = 0; msk < (1 << n); msk++) {
      if (!msk) continue;
      double tmp = 1;
      if (__builtin_popcount(msk) > 1) {
        for (int i = 0; i < (n); i++)
          if (msk & (1 << i))
            tmp *= eq(i, t);
          else
            tmp *= less_than(i, t);
        ans += tmp * t;
      }
      tmp = 1;
      for (int i = 0; i < (n); i++) {
        if (msk & (1 << i))
          tmp *= eq(i, t);
        else
          aux.push_back(i);
      }
      for (int x : aux) {
        double tmp2 = tmp * greater_than(x, t);
        for (int y : aux)
          if (x != y) tmp2 *= less_than(y, t);
        ans += tmp2 * t;
      }
      aux.clear();
    }
  }
  printf("%.10f\n", ans);
  cerr << ans << endl;
  return 0;
}
