#include <bits/stdc++.h>
const long long INF = 4e18L + 1;
const int IINF = 2e9 + 1;
const int limit = 1048576;
using namespace std;
template <class F>
struct mat {
  long long n;
  vector<vector<F> > tab;
  mat(long long n1) : n{n1}, tab(vector<vector<F> >(n, vector<F>(n, 0))) {
    for (long long i = (long long)0; i < (long long)n; i++) {
      tab[i][i] = 1;
    }
  }
  mat(long long n1, F val)
      : n{n1}, tab(vector<vector<F> >(n, vector<F>(n, val))) {}
  mat operator*(const mat& other) {
    mat res(n, 0);
    for (long long k = (long long)0; k < (long long)n; k++) {
      for (long long j = (long long)0; j < (long long)n; j++) {
        for (long long i = (long long)0; i < (long long)n; i++) {
          res.tab[k][i] += tab[k][j] * other.tab[j][i];
        }
      }
    }
    return res;
  }
  mat pow(long long p) {
    mat self = *this;
    if (p == 0) {
      return mat(n);
    } else {
      mat temp = (self * self).pow(p / 2);
      if (p & 1) {
        return temp * self;
      } else {
        return temp;
      }
    }
  }
  vector<F> operator*(const vector<F>& v) {
    vector<F> res(n, 0);
    for (long long k = (long long)0; k < (long long)n; k++) {
      for (long long i = (long long)0; i < (long long)n; i++) {
        res[k] += v[i] * tab[k][i];
      }
    }
    return res;
  }
};
long long n, x, l;
vector<long double> P;
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> x;
  l = (1 << (32 - __builtin_clz(x)));
  P.resize(l, 0.0);
  for (long long i = (long long)0; i < (long long)x + 1; i++) {
    cin >> P[i];
  }
  mat<long double> trans(l, 0.0);
  for (long long i = (long long)0; i < (long long)l; i++) {
    for (long long j = (long long)0; j < (long long)l; j++) {
      trans.tab[i][j] = P[i ^ j];
      if (0) cout << trans.tab[i][j] << " ";
    }
    if (0) cout << "\n";
  }
  mat<long double> temp = trans.pow(n - 1);
  for (long long i = (long long)0; i < (long long)l; i++) {
    for (long long j = (long long)0; j < (long long)l; j++) {
      if (0) cout << temp.tab[i][j] << " ";
    }
    if (0) cout << "\n";
  }
  auto res = trans.pow(n - 1) * P;
  for (auto& i : res) {
    if (0) cout << i << " ";
  }
  if (0) cout << "\n";
  cout << 1.0 - res[0] << "\n";
  return 0;
}
