#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
long double ans;
long long n;
struct Point {
  long long x, y;
  void read() { scanf("%I64d%I64d", &x, &y); }
} p[maxn];
int GCD(int a, int b) { return b == 0 ? a : GCD(b, a % b); }
int main() {
  scanf("%I64d", &n);
  for (int i = 0; i < n; ++i) p[i].read();
  long double k = 1 - pow(0.5, n) * (n * n + n + 2.0) / 2.0;
  long double P = 1.0 / 4.0 / k;
  for (int i = 1; i < n; ++i) {
    long double now = P - pow(0.5, n) / k;
    int tmp = i;
    for (int j = 0; j < n; ++j) {
      ans += now * (p[j].x * p[tmp].y - p[j].y * p[tmp].x -
                    GCD(abs(p[j].x - p[tmp].x), abs(p[j].y - p[tmp].y)));
      tmp = (tmp + 1) % n;
    }
    P /= 2;
    if (P < 1e-20) break;
  }
  printf("%.15lf\n", (double)(ans / 2 + 1.0));
  return 0;
}
