#include <bits/stdc++.h>
using namespace std;
const int N = 222222;
int n;
pair<int, int> a[N];
long double pow2[N];
__inline long double det(const pair<int, int> &a, const pair<int, int> &b) {
  return 1. * a.first * b.second - 1. * a.second * b.first;
}
__inline int gcd(int x, int y) {
  x = abs(x);
  y = abs(y);
  for (; y;) {
    x %= y;
    swap(x, y);
  }
  return x;
}
int main(void) {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%d%d", &a[i].first, &a[i].second);
    a[i + n] = a[i];
  }
  pow2[0] = 1.;
  for (int i = 1; i <= n + n; ++i) {
    pow2[i] = pow2[i - 1] * 2.;
  }
  long double ret = 0;
  if (n < 200) {
    for (int step = 1; step < n; ++step) {
      for (int i = 0; i < n; ++i) {
        int j = i + step;
        long double area = det(a[i], a[j]) / 2.;
        long double points =
            gcd(a[i].first - a[j].first, a[i].second - a[j].second);
        long double prob = pow2[n - step - 1] - 1;
        ret += (area - points / 2.) * prob;
      }
    }
    ret /= pow2[n] - 1 - n - .5 * (n - 1) * n;
    ret += 1.;
  } else {
    for (int step = 1; step < 60; ++step) {
      for (int i = 0; i < n; ++i) {
        int j = i + step;
        long double area = det(a[i], a[j]) / 2.;
        long double points =
            gcd(a[i].first - a[j].first, a[i].second - a[j].second);
        long double prob = 1. / pow2[step + 1];
        ret += (area - points / 2.) * prob;
      }
    }
    ret += 1.;
  }
  cout << fixed << setprecision(20) << ret << endl;
}
