#include<bits/stdc++.h>
using namespace std;
const int N=30,M=1<<20,P=100000000;
int a[N];
int dp[N][N],n,m;
int s[N][M],top[N];
void build(int a,int* s,int& top)
{
for(int i=0;i<(1<<m);i++)
{
if((i&(i<<1))||(i&a)!=i) continue;
s[top++]=i;
}
}
int main()
{
bool x;
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
scanf("%d",&x);
a[i]=(a[i]<<1)+x;
}
for(int i=0;i<n;i++) build(a[i],s[i],top[i]);
for(int j=0;j<top[0];j++) dp[0][j]=1;
for(int i=1;i<n;i++)
for(int j=0;j<top[i];j++)
for(int k=0;k<top[i-1];k++)
if(!(s[i][j]&s[i-1][k]))
{
dp[i][j]+=dp[i-1][k];
dp[i][j]%=P;
}
int ans=0;
for(int j=0;j<top[n-1];j++)
ans=(ans+dp[n-1][j])%P;
cout<<ans;
return 0;
}