#include <bits/stdc++.h>
using namespace std;
int n, m;
unordered_set<string> a1, b1;
string modifica;
int pi;
long long ans = 0;
char trans(char k) { return (k == '0' ? '1' : '0'); }
void change(int a = -1, int b = -1, int c = -1, int d = -1, int e = -1) {
  if (a != -1) modifica[a] = trans(modifica[a]);
  if (b != -1) modifica[b] = trans(modifica[b]);
  if (c != -1) modifica[c] = trans(modifica[c]);
  if (d != -1) modifica[d] = trans(modifica[d]);
  if (e != -1) modifica[e] = trans(modifica[e]);
  if (pi && a1.find(modifica) != a1.end()) {
    b1.insert(modifica);
  }
  if (!pi) b1.insert(modifica);
  if (a != -1) modifica[a] = trans(modifica[a]);
  if (b != -1) modifica[b] = trans(modifica[b]);
  if (c != -1) modifica[c] = trans(modifica[c]);
  if (d != -1) modifica[d] = trans(modifica[d]);
  if (e != -1) modifica[e] = trans(modifica[e]);
  return;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n >> m;
  int dife;
  for (int(i) = (0); (i) < (m); (i)++) {
    pi = i;
    cin >> modifica >> dife;
    if (dife == 0) {
      change();
    }
    for (int(p1) = (0); (p1) < (n); (p1)++) {
      if (dife == 1) {
        change(p1);
        continue;
      }
      for (int(p2) = (p1 + 1); (p2) < (n); (p2)++) {
        if (dife == 2) {
          change(p1, p2);
          continue;
        }
        for (int(p3) = (p2 + 1); (p3) < (n); (p3)++) {
          if (dife == 3) {
            change(p1, p2, p3);
            continue;
          }
          for (int(p4) = (p3 + 1); (p4) < (n); (p4)++) {
            if (dife == 4) {
              change(p1, p2, p3, p4);
              continue;
            }
            for (int(p5) = (p4 + 1); (p5) < (n); (p5)++) {
              if (dife == 5) {
                change(p1, p2, p3, p4, p5);
                continue;
              }
            }
          }
        }
      }
    }
    a1.clear();
    a1 = b1;
    ans = b1.size();
    b1.clear();
  }
  cout << ans << endl;
}
