#include <bits/stdc++.h>
using namespace std;
template <class T>
bool setmax(T &_a, T _b) {
  if (_b > _a) {
    _a = _b;
    return true;
  }
  return false;
}
template <class T>
bool setmin(T &_a, T _b) {
  if (_b < _a) {
    _a = _b;
    return true;
  }
  return false;
}
template <class T>
T gcd(T _a, T _b) {
  return _b == 0 ? _a : gcd(_b, _a % _b);
}
int main() {
  const int MAXN = 100010;
  static double xpos[MAXN], ypos[MAXN];
  int n;
  scanf("%d", &n);
  for (int i = int(1); i <= int(n); ++i) scanf("%lf%lf", &xpos[i], &ypos[i]);
  double ans = 1.;
  for (int d = int(max(2, n - 100)); d <= int(n - 1); ++d) {
    double coeff_a = pow(.5, n - d + 1) - pow(.5, n);
    double coeff_b = 1 - pow(.5, n) * (1 + n + double(n) * double(n - 1) / 2.);
    double coeff = coeff_a / coeff_b;
    for (int i = int(1); i <= int(n); ++i) {
      int j = (i + d - 1) % n + 1;
      double s = (xpos[j] * ypos[i] - ypos[j] * xpos[i]) / 2.;
      double b = abs(gcd(int(xpos[i] - xpos[j]), int(ypos[i] - ypos[j])));
      ans += coeff * (s - b / 2.);
    }
  }
  printf("%.15lf\n", ans);
  return 0;
}
