#include <bits/stdc++.h>
using namespace std;
template <class T>
bool uin(T &a, T b) {
  return a > b ? (a = b, true) : false;
}
template <class T>
bool uax(T &a, T b) {
  return a < b ? (a = b, true) : false;
}
const int MAXN = 200001;
const long double eps = 1e-13;
long long x[MAXN], y[MAXN];
long double pw[MAXN];
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.precision(10);
  cout << fixed;
  int N;
  cin >> N;
  for (int i = 0; i < (int)(N); ++i) cin >> x[i] >> y[i];
  for (int i = 0; i < (int)(N); ++i) x[i + N] = x[i], y[i + N] = y[i];
  pw[0] = 1.0;
  for (int i = 0; i < (int)(N); ++i) pw[i + 1] = pw[i] * 0.5;
  long double ans = 0.0;
  for (int i = 0; i < (int)(N); ++i) {
    for (int j = 1; j <= (int)(min(N - 1, 100)); ++j) {
      int G = gcd(abs(x[i + j] - x[i]), abs(y[i + j] - y[i]));
      ans +=
          0.5 * pw[j + 1] * (-1.0 * (x[i + j] - x[i]) * (y[i + j] + y[i]) - G);
      ans += 0.5 * G * pw[N];
    }
  }
  long double coef = 1.0 - pow(0.5, N) * (1.0 + N + 0.5 * N * (N - 1));
  cout << (double)(ans / coef) + 1.0 << '\n';
  return 0;
}
