#include <bits/stdc++.h>
using namespace std;
int N, M;
struct Unit {
  bool s[40];
  int d;
  void get() {
    char str[40];
    int i;
    scanf("%s%d", str, &d);
    for (i = 0; str[i]; i++) s[i] = str[i] - '0';
  }
};
Unit ut[11];
int res;
bool sd[40];
bool ok() {
  int i, j, temp;
  for (i = 1; i < M; i++) {
    temp = 0;
    for (j = 0; j < N; j++) temp += sd[j] ^ ut[i].s[j];
    if (temp != ut[i].d) return 0;
  }
  return 1;
}
void dfs(int loc, int dif) {
  if (dif > ut[0].d || dif + N - loc < ut[0].d) return;
  if (loc == N) {
    if (dif != ut[0].d) return;
    if (ok()) res++;
    return;
  }
  sd[loc] = ut[0].s[loc];
  dfs(loc + 1, dif);
  sd[loc] = ut[0].s[loc] ^ 1;
  dfs(loc + 1, dif + 1);
}
void get_data() {
  res = 0;
  scanf("%d%d", &N, &M);
  int i;
  for (i = 0; i < M; i++) ut[i].get();
  dfs(0, 0);
}
void run() { printf("%d\n", res); }
int main() {
  get_data();
  run();
  return 0;
}
