rt
#include<bits/stdc++.h>
using namespace std;
const long long maxn=100005;
long long n,m,c[15]={},dp[15][10005]={};
int main(){
cin>>n>>m;
for(long long i=1;i<=n;i++){
for(long long j=1;j<=m;j++){
long long x;
cin>>x;
c[i]*=2;
c[i]+=x;
}
}
for(long long i=0;i<=c[1];i++){//初始化dp[1][?],如果合法就可以=1
if(i|c[i]==c[i]&&(i&(i*2))==0)dp[1][i]=1;
// cout<<dp[1][i]<<' ';
}
// cout<<'\n';
for(long long l=2;l<=n;l++){//枚举行
for(long long i=0;i<=c[l];i++){//枚举当前行状态
if((i|c[l])!=c[l]||(i&(i*2)))continue;
// cout<<1;
for(long long j=0;j<=c[l-1];j++){//枚举上一行状态
if((j|c[l-1])!=c[l-1]||(j&(j*2)))continue;
// cout<<2;
if(i&j)continue;
// cout<<3;
dp[l][i]=(dp[l][i]+dp[l-1][j])%(long long)(1e9);
}
// cout<<dp[l][i]<<' ';
}
// cout<<'\n';
}
long long ans=0;
for(long long i=0;i<=m;i++){
ans=(ans+dp[n][i])%(long long)(1e9);
}
cout<<ans<<'\n';
return 0;
}
//from chpyx2