#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long INFF = 1e18;
const double pi = acos(-1.0);
const double inf = 1e18;
const double eps = 1e-9;
const long long mod = 1e9 + 7;
const int maxmat = 10;
const unsigned long long BASE = 31;
struct Mat {
  int n;
  double a[128][128];
  Mat(int _n = 0) : n(_n) { memset(a, 0, sizeof(a)); }
  Mat operator*(const Mat &rhs) const {
    int N = rhs.n;
    Mat c(N);
    for (int i = 0; i < N; i++)
      for (int j = 0; j < N; j++)
        for (int k = 0; k < N; k++)
          c.a[i][j] = (c.a[i][j] + a[i][k] * rhs.a[k][j]);
    return c;
  }
};
double qpow(Mat A, int b) {
  int N = A.n;
  Mat C(N);
  for (int i = 0; i < N; i++) C.a[i][i] = 1;
  while (b) {
    if (b & 1) C = C * A;
    b >>= 1;
    A = A * A;
  }
  double res = 0;
  for (int i = 1; i < N; i++) res += C.a[0][i];
  return res;
}
double p[128];
int main(int argc, char const *argv[]) {
  int N, x;
  cin >> N >> x;
  memset(p, 0, sizeof(p));
  Mat A(128);
  for (int i = 0; i <= x; i++) cin >> p[i];
  for (int i = 0; i < 128; i++) {
    for (int j = 0; j < 128; j++) {
      int tmp = i ^ j;
      A.a[i][j] = p[tmp];
    }
  }
  printf("%.6f\n", qpow(A, N));
  return 0;
}
