#include <algorithm>
#include <iostream>
using namespace std;
#define maxn 2005
long long sit[maxn];
long long sta[maxn];
long long f[15][maxn][105];
int n, k, cnt;
void dfs(int x,int num,int cur){
if(cur>=n){
sit[++cnt]=x;
sta[cnt]=num;
return ;
}
dfs(x,num,cur+1);
dfs(x+(1<<cur),num+1,cur+2);
}
int main(){
cin>>n>>k;
dfs(0,0,0);
for(int i=1; i<=cnt;i++) f[1][i][sta[i]]++;
for(int i=2;i<=n;i++){
for(int j=1;j<=cnt;j++){
for(int l=1;l<=cnt;l++){
if(sit[j]&sit[l]) continue;
if((sit[j]<<1)&sit[l]) continue;
if(sit[j]&(sit[l]<<1)) continue;
for(int p=sta[j];p<=k;p++){
f[i][j][p]+=f[i-1][l][p-sta[j]];
}
}
}
}
long long ans=0;
for(int i=1;i<=cnt;i++) ans+=f[n][i][k];
cout<<ans<<endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int dp[115][70][70];
int maze[105];
int sit[70];
int sta[70];
int n,m,len;
char str[111];
int main(){
while(cin>>n>>m){
memset(dp,0,sizeof dp);
memset(maze,0,sizeof maze);
memset(sit,0,sizeof sit);
memset(sta,0,sizeof sta);
for(int i=1;i<=n;i++){
scanf("%s", str);
for(int j=0;j<m;j++){
if(str[j]=='H'){
maze[i]+=(1<<j);
}
}
}
len=0;
for(int i=0;i<(1<<m);i++){
if(!(i&(i<<1)) && !(i&(i<<2))){
int k=i,sum=0;
while(k){
if(k&1) sum++;
k>>=1;
}
sta[++len]=sum;
sit[len]=i;
}
}
for(int i=1;i<=len;i++){
if(!(sit[i]&maze[1])){
dp[1][i][1]=sta[i];
}
}
for(int i=2;i<=n;i++){
for(int j=1;j<=len;j++){
if(sit[j]&maze[i]) continue;
for(int k=1;k<=len;k++){
if(sit[k]&sit[j]) continue;
if(sit[k]&maze[i-1]) continue;
for(int t=1;t<=len;t++){
if(sit[t]&sit[j]) continue;
if(sit[t]&sit[k]) continue;
if(sit[t]&maze[i-2]) continue;
dp[i][j][k]=max(dp[i][j][k],dp[i-1][k][t]+sta[j]);
}
}
}
}
int ans=0;
for(int i=1;i<=len;i++){
for(int j=1;j<=len;j++){
ans=max(ans,dp[n][i][j]);
}
}
cout<<ans<<endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define maxn 10000
#define MOD 100000000
long long dp[15][maxn];
long long sit[maxn];
long long maze[maxn];
int n,m,a,len;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=0;j<m;j++){
cin>>a;
a=1-a;
maze[i]+=(a<<j);
}
}
len=0;
for(int i=0;i<(1<<m);i++){
if(!(i&(i<<1))){
sit[++len]=i;
}
}
dp[0][1]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=len;j++){
if(sit[j]&maze[i]) continue;
for(int k=1;k<=len;k++){
if(sit[k]&sit[j]) continue;
if(sit[k]&maze[i-1]) continue;
dp[i][j]+=dp[i-1][k];
dp[i][j]%=MOD;
}
}
}
long long ans=0;
for(int i=1;i<=len;i++){
ans+=dp[n][i];
ans%=MOD;
}
cout<<ans<<endl;
return 0;
}