#include <bits/stdc++.h>
using namespace std;
const int MAXX = 110;
double P[MAXX];
const int MAXN = (int)(1E4 + 10);
const int MAX_XOR = 128;
double dp[MAXN][MAX_XOR];
double tmp_dp[MAX_XOR];
double next_tmp_dp[MAX_XOR];
double tmp_border[MAX_XOR];
void binpow(int n) {
  tmp_dp[0] = 1.0;
  while (n) {
    if (n & 1) {
      for (int t = 0; t < MAX_XOR; t++) {
        next_tmp_dp[t] = 0;
      }
      for (int t = 0; t < MAX_XOR; t++) {
        for (int k = 0; k < MAX_XOR; k++) {
          next_tmp_dp[t ^ k] += tmp_dp[t] * dp[MAXN - 1][k];
        }
      }
      for (int t = 0; t < MAX_XOR; t++) {
        tmp_dp[t] = next_tmp_dp[t];
      }
    }
    for (int t = 0; t < MAX_XOR; t++) {
      tmp_border[t] = 0;
    }
    for (int t = 0; t < MAX_XOR; t++) {
      for (int k = 0; k < MAX_XOR; k++) {
        tmp_border[t ^ k] += dp[MAXN - 1][t] * dp[MAXN - 1][k];
      }
    }
    for (int t = 0; t < MAX_XOR; t++) {
      dp[MAXN - 1][t] = tmp_border[t];
    }
    n >>= 1;
  }
  return;
}
int main() {
  int n, x;
  scanf("%d%d", &n, &x);
  for (int j = 0; j <= x; j++) {
    scanf("%lf", &P[j]);
  }
  for (int j = 0; j <= x; j++) {
    dp[1][j] = P[j];
  }
  for (int i = 2; i <= min(n, MAXN - 1); i++) {
    for (int j = 0; j <= x; j++) {
      for (int prev_xor = 0; prev_xor < MAX_XOR; prev_xor++) {
        int cur_xor = prev_xor ^ j;
        dp[i][cur_xor] += dp[i - 1][prev_xor] * P[j];
      }
    }
  }
  int cnt = n / (MAXN - 1);
  binpow(cnt);
  n -= cnt * (MAXN - 1);
  if (n <= min(n, MAXN - 1) && n > 0) {
    double ans = 0;
    double ans_tmp_dp[MAX_XOR];
    for (int t = 0; t < MAX_XOR; t++) {
      ans_tmp_dp[t] = 0;
    }
    for (int t = 0; t < MAX_XOR; t++) {
      for (int k = 0; k < MAX_XOR; k++) {
        ans_tmp_dp[t ^ k] += tmp_dp[k] * dp[n][t];
      }
    }
    for (int t = 1; t < MAX_XOR; t++) {
      ans += ans_tmp_dp[t];
    }
    printf("%.6lf\n", ans);
  }
  return 0;
}
