#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, y;
};
Point points[100000];
int gcd(int a, int b) {
  if (b) return gcd(b, a % b);
  return a;
}
int main() {
  int n;
  while (scanf("%d", &n) != EOF) {
    long double A = 0.0;
    long double b = 0.0;
    for (int i = int(0); i < int(n); i++) {
      scanf("%lf %lf", &points[i].x, &points[i].y);
    }
    long double totProb = 1.0;
    if (n < 60) {
      totProb = pow(2., n) - n * (n - 1) / 2. - n - 1;
      for (int i = int(0); i < int(n); i++) {
        for (int j = int(1); j < int(n); j++) {
          int k = (i + j) % n;
          long double prob = pow(2, n - j - 1) - 1.;
          A += prob * (points[i].x * points[k].y - points[k].x * points[i].y);
          b += prob * gcd(abs(points[i].x - points[k].x),
                          abs(points[i].y - points[k].y));
        }
      }
    } else {
      for (int i = int(0); i < int(n); i++) {
        for (int j = int(1); j < int(60); j++) {
          int k = (i + j) % n;
          long double prob = pow(2, -j - 1);
          A += prob * (points[i].x * points[k].y - points[k].x * points[i].y);
          b += prob * gcd(abs(points[i].x - points[k].x),
                          abs(points[i].y - points[k].y));
        }
      }
    }
    double ans = (A - b) / totProb / 2. + 1.;
    printf("%.12lf\n", ans);
  }
  return 0;
}
