#include <bits/stdc++.h>
using namespace std;
int n, p, s[55];
long long f[55][55][55][55], pw[55], ans;
void add(long long &a, long long b) {
  a += b;
  if (a >= 1000000007) a -= 1000000007;
}
int main() {
  scanf("%d%d", &n, &p);
  pw[0] = 1;
  for (int i = 1; i <= n; i++)
    scanf("%d", &s[i]), pw[i] = pw[i - 1] * 2 % 1000000007;
  f[0][0][0][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int ew = 0; ew <= i; ew++)
      for (int eb = 0; eb + ew <= i; eb++)
        for (int ow = 0; ow + ew + eb <= i; ow++) {
          int ob = i - ew - eb - ow;
          if (ow + ew && s[i]) {
            long long res = 0;
            if (ow) {
              if (ob)
                add(res, f[i - 1][ew][eb][ow - 1] * pw[ob - 1] % 1000000007);
              else
                add(res, f[i - 1][ew][eb][ow - 1]);
            }
            if (ew && ob)
              add(res, f[i - 1][ew - 1][eb][ow] * pw[ob - 1] % 1000000007);
            add(f[i][ew][eb][ow], res * pw[ow + ew + eb - 1] % 1000000007);
          }
          if (ob + eb && s[i] < 1) {
            long long res = 0;
            if (ob) {
              if (ow)
                add(res, f[i - 1][ew][eb][ow] * pw[ow - 1] % 1000000007);
              else
                add(res, f[i - 1][ew][eb][ow]);
            }
            if (eb && ow)
              add(res, f[i - 1][ew][eb - 1][ow] * pw[ow - 1] % 1000000007);
            add(f[i][ew][eb][ow], res * pw[eb + ob + ew - 1] % 1000000007);
          }
          if (i == n && (ow + ob) % 2 == p) add(ans, f[i][ew][eb][ow]);
        }
  printf("%d\n", ans);
  return 0;
}
