传送门
//MADE BY Y_is_sunshine;
//#include <bits/stdc++.h>
//#include <memory.h>
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <cstdio>
#include <vector>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define INF 0x3f3f3f3f
#define MAXN 5005
const int mod = 1e9 + 7;
const double PI = acos(-1);
using namespace std;
int N, M;
char f[20];
int cnt[20];
int state[20][MAXN];
long long dp[20][MAXN];
void init(int k) {
for (int i = 0; i < M; i++)
cin >> f[i];
f[M] = '\0';
int temp = strtol(f, NULL, 2);
int tot = (1 << M) - 1;
for (int i = 0; i <= tot; i++) {
if ((i | temp) == temp) {
if(!((i << 1)& i))
state[k][++cnt[k]] = i;
}
}
}
int main(void)
{
freopen("data.txt", "r", stdin);
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> N >> M;
for(int i = 1; i <= N; i++)
init(i);
for (int i = 1; i <= cnt[1]; i++)
dp[1][i] = 1;
for (int i = 2; i <= N; i++) {
for (int j = 1; j <= cnt[i - 1]; j++) {
for (int k = 1; k <= cnt[i]; k++) {
if (!(state[i - 1][j] & state[i][k])) {
dp[i][k] += dp[i - 1][j];
}
}
}
}
long long ans = 0;
for (int i = 1; i <= cnt[N]; i++)
ans += dp[N][i];
cout << ans % 100000000 << endl;
freopen("CON", "r", stdin);
system("pause");
return 0;
}