#include <bits/stdc++.h>
using namespace std;
long long x;
string s, last;
set<long long> gen, nw;
int n;
void rek(int i, int k) {
  if (n - i < k || k < 0) return;
  if (i == n) {
    gen.insert(x);
  } else {
    x &= ~(1ll << i);
    rek(i + 1, k - (s[i] == '0'));
    x |= (1ll << i);
    rek(i + 1, k - (s[i] == '1'));
  }
}
void out(long long a) {
  for (int i = n - 1; i >= 0; i--) printf("%I64d", a >> i & 1);
  puts("");
}
int dif(long long a) {
  int ans = 0;
  for (int i = 0; i < (int)n; i++)
    if ((a >> ((long long)i) & 1) == (s[i] - '0')) ans++;
  return ans;
}
int main() {
  int m, k, lk;
  scanf("%d %d", &n, &m);
  cin >> s >> k;
  last = s;
  lk = k;
  rek(0, k);
  for (int i = 0; i < (int)m - 1; i++) {
    cin >> s >> k;
    if (last == s && lk == k) continue;
    nw.clear();
    for (set<long long>::iterator j = gen.begin(); j != gen.end(); j++) {
      if (dif(*j) == k) nw.insert(*j);
    }
    last = s;
    lk = k;
    gen = nw;
  }
  cout << gen.size() << endl;
  return 0;
}
