#include <bits/stdc++.h>
int Cnum[15];
char input[15][40];
int ans = 0;
int n, m;
char contruct[40];
bool check(char s[]) {
  int i, j;
  for (i = 0; i < m; i++) {
    int num = 0;
    for (j = 0; j < n; j++) {
      if (s[j] == input[i][j]) num++;
    }
    if (num != Cnum[i]) return false;
  }
  return true;
}
void dfs(int x, int y, char s[]) {
  int i;
  if (x == Cnum[0]) {
    for (i = y; i < n; i++) {
      if (s[i] == '1')
        contruct[i] = '0';
      else
        contruct[i] = '1';
    }
    contruct[n] = '\0';
    if (check(contruct)) {
      ans++;
    }
    return;
  }
  for (i = y; i < n; i++) {
    if (s[i] == '1')
      contruct[i] = '1';
    else
      contruct[i] = '0';
    dfs(x + 1, i + 1, s);
    if (contruct[i] == '1')
      contruct[i] = '0';
    else
      contruct[i] = '1';
  }
}
int main() {
  scanf("%d%d", &n, &m);
  int i;
  for (i = 0; i < m; i++) {
    scanf("%s%d", input[i], &Cnum[i]);
  }
  dfs(0, 0, input[0]);
  printf("%d\n", ans);
  return 0;
}
