#include <bits/stdc++.h>
#define int long long
#define H 19260817
#define rint register int
#define For(i,l,r) for(rint i=l;i<=r;++i)
#define FOR(i,r,l) for(rint i=r;i>=l;--i)
#define MOD 1000003
#define mod 100000000
using namespace std;
inline int read() {
rint x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
}
void print(int x){
if(x<0){putchar('-');x=-x;}
if(x>9){print(x/10);putchar(x%10+'0');}
else putchar(x+'0');
return;
}
const int N = 15;
int n, m, dp[1<<N][N], f[N], cnt, a[N], ans;
signed main() {
n = read(), m = read();
For(i,0,n-1) {
For(j,0,m-1) {
int x = read();
a[i] = (a[i] << 1) + x;
}
}
for (int i = 0; i < 1 << m; i++) {
f[++cnt] = i;
for (int j = 1; j < m; j++) {
if((i >> j & 1) && (i >> (j-1) & 1)) {
cnt--;
break;
}
}
}
For(i,1,cnt) {
dp[f[i]][0] = 1;
}
for (int j = 1; j < n; j++) {
for (int i = 1; i <= cnt; i++) {
if((f[i] & a[j]) == f[i]) {
for (int k = 1; k <= cnt; k++) {
if((f[k] & a[j]) == f[k] && ((f[k] & f[i]) == 0)) {
dp[f[i]][j] = (dp[f[i]][j] + dp[f[k]][j-1] % mod) % mod;
}
}
}
}
}
For(i,1,cnt) {
ans = (ans + dp[f[i]][n-1] % mod) % mod;
}
cout << ans << '\n';
return 0;
}