#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int n, p, a[55];
long long f[55][2][2][2], er[55], ans;
void add(long long &a, long long b) { a = (a + b) % mod; }
int main() {
  scanf("%d%d", &n, &p);
  er[0] = 1;
  for (int i = 1; i <= n; i++)
    scanf("%d", &a[i]), er[i] = (er[i - 1] << 1) % mod;
  f[0][0][0][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j < 2; j++)
      for (int k = 0; k < 2; k++)
        for (int l = 0; l < 2; l++) {
          int t = f[i - 1][j][k][l];
          if (a[i] != 0) {
            if (k)
              add(f[i][j][k][l], 1ll * t * er[i - 2] % mod),
                  add(f[i][j ^ 1][k][l | 1], 1ll * t * er[i - 2] % mod);
            else
              add(f[i][j ^ 1][k][l | 1], 1ll * t * er[i - 1] % mod);
          }
          if (a[i] != 1) {
            if (l)
              add(f[i][j][k][l], 1ll * t * er[i - 2] % mod),
                  add(f[i][j ^ 1][k | 1][l], 1ll * t * er[i - 2] % mod);
            else
              add(f[i][j ^ 1][k | 1][l], 1ll * t * er[i - 1] % mod);
          }
        }
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 2; j++) add(ans, f[n][p][i][j]);
  printf("%lld\n", ans);
  return 0;
}
