#include <bits/stdc++.h>
using namespace std;
void RI() {}
template <typename... T>
void RI(int &head, T &...tail) {
  scanf("%d", &head);
  RI(tail...);
}
void shik(int l, int r, int x, long double &q1, long double &q2,
          long double &q3) {
  long double m = r - l + 1;
  if (x < l) {
    q1 = 0;
    q2 = 0;
    q3 = 1;
  } else if (x <= r) {
    q1 = (x - l) / m;
    q2 = 1 / m;
    q3 = (r - x) / m;
  } else {
    q1 = 1;
    q2 = 0;
    q3 = 0;
  }
}
int n, l[10], r[10];
int main() {
  RI(n);
  for (int i = 0; i < int(n); i++) RI(l[i], r[i]);
  long double ans = 0;
  for (int x = (1); x <= int(10000); x++) {
    long double dp[10][10] = {};
    dp[0][0] = 1;
    for (int j = 0; j < int(n); j++) {
      long double q1, q2, q3;
      shik(l[j], r[j], x, q1, q2, q3);
      for (int k1 = n - 1; k1 >= 0; k1--)
        for (int k2 = n - 1; k2 >= 0; k2--) {
          long double me = dp[k1][k2];
          dp[k1][k2] = 0;
          if (me == 0) continue;
          dp[k1][k2] += q1 * me;
          dp[k1 + 1][k2] += q2 * me;
          dp[k1][k2 + 1] += q3 * me;
        }
    }
    long double p = 0;
    for (int i = (1); i <= int(n); i++) {
      p += dp[i][1];
      if (i >= 2) p += dp[i][0];
    }
    ans += p * x;
  }
  printf("%.12f\n", (double)ans);
  return 0;
}
