#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
const int N=13,mod=1e8;
vector<int>state;
vector<int>head[1<<N];
int n,m,x,f[14][1<<N],g[N];
//判断有没有相邻的1
bool check(int x){
return !(x&x>>1);
}
void init(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>x;
g[i]+=(!x<<(j-1));//荒废土地是0,这里转换为1
}
}
for(int i=0;i<(1<<m);i++){
if(check(i))
state.push_back(i);
}
for(int i=0;i<state.size();i++){
for(int j=0;j<state.size();j++){
int a=state[i];
int b=state[j];
if((a&b)==0)
head[i].push_back(j);
}
}
f[0][0]=1;
for(int i=1;i<=n+1;i++){
for(int a=0;a<state.size();a++){
if(state[a]&g[i]){
continue;
}
for(int b=0;b<head[a].size();b++){
f[i][a]=(f[i][a]+f[i-1][head[a][b]])%mod;
}
}
}
cout<<f[n+1][0];
}
int main(){
init();
return 0;
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.