//被一个数组卡了一个小时,蛋疼
#include <iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
#define mod 100000000
int n,m,k,sum[1<<13],dp[1<<15][20];//刚开始shidp[605][20],sum[605],发现远远不够呀这个状态数
bool ok(int x)
{
if(x&(x<<1))
return false;
return true;
}
void init()
{
int i;
for(i=0;i<(1<<n);i++)
{
if(ok(i))
sum[k++]=i;
}
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
int i,j,q,map[105];
memset(map,0,sizeof(map));
memset(sum,0,sizeof(sum));
memset(dp,0,sizeof(dp));
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
int tem;
scanf("%d",&tem);
if(tem==0)
map[i]=map[i]|(1<<(n-j));
}
}
k=0;
init();
for(i=0;i<k;i++)
{
if((sum[i]&map[1])==0)
{
dp[sum[i]][1]=1;
}
}
for(i=2;i<=m;i++)
{
for(j=0;j<k;j++)
{
if(sum[j]&map[i])
continue;
for(q=0;q<k;q++)
{
if(sum[j]&sum[q])
continue;
if(sum[q]&map[i-1])
continue;
dp[sum[j]][i]=(dp[sum[j]][i]+dp[sum[q]][i-1])%mod;
}
}
}
int ans=0;
for(i=0;i<k;i++)
{
//if((map[m]&sum[i])==0)
//{
ans=(ans+dp[sum[i]][m])%mod;
//}
}
cout<<ans<<endl;
}
return 0;
}