主要是预处理
#include<bits/stdc++.h>
using namespace std;
const int N=14,mod=1e8;
int n,m,g[N],f[N][1<<N];
vector<int>state,head[1<<N];
bool check(int x)
{
return !(x&(x>>1));
}
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
int x;
cin>>x;
g[i]+=(!x<<(j-1));
}
}
for(int i=0;i<1<<n;i++)
{
if(check(i)) state.push_back(i);
}
for(int i=0;i<state.size();i++)
{
for(int j=0;j<state.size();j++)
{
if(!(state[i]&state[j])) head[i].push_back(j);
}
}
f[0][0]=1;
for(int i=1;i<=m+1;i++)
{
for(int a=0;a<state.size();a++)
{
if(state[a]&g[i]) continue;
for(int j=0;j<head[a].size();j++)
f[i][a]=(f[i-1][head[a][j]]+f[i][a])%mod;
}
}
cout<<f[m+1][0]<<endl;
return 0;
}