#include <bits/stdc++.h>
using namespace std;
const int maxn = 128;
struct node {
  double a[maxn][maxn];
};
node E, k;
double p[maxn];
int n, x;
node mul(node xx, node yy) {
  node ans;
  for (int i = 0; i < maxn; i++) {
    for (int j = 0; j < maxn; j++) {
      ans.a[i][j] = 0;
      for (int t = 0; t < maxn; t++) {
        ans.a[i][j] += xx.a[i][t] * yy.a[t][j];
      }
    }
  }
  return ans;
}
node fpow(node pp, int kk) {
  node ans = E;
  while (kk) {
    if (kk & 1) ans = mul(ans, pp);
    pp = mul(pp, pp);
    kk >>= 1;
  }
  return ans;
}
int main() {
  cin >> n >> x;
  for (int i = 0; i <= x; i++) cin >> p[i];
  for (int i = 0; i < maxn; i++) E.a[i][i] = 1;
  for (int i = 0; i <= x; i++) {
    for (int j = 0; j < maxn; j++) {
      k.a[i ^ j][j] += p[i];
    }
  }
  cout << fixed << setprecision(12) << 1.0 - fpow(k, n).a[0][0] << "\n";
  return 0;
}
