题目链接
#include<bits/stdc++.h>
using namespace std;
int n,m;
long long dp[25][1<<12];
bool vis[1<<11];
bool valid(int x){
int cnt=0;
for(int i=0;i<m;i++){
if(!((x>>i)&1))cnt++;
else{
if(cnt&1)return 0;
cnt=0;
}
}
if(cnt&1)return 0;
return 1;
}
int main(){
while(cin>>n>>m&&n){
memset(vis,0,sizeof(vis));
memset(dp,0,sizeof(dp));
for(int i=0;i<(1<<m);i++){
if(valid(i))vis[i]=1;
}
dp[0][0]=1;
for(int b=0;b<(1<<m);b++){
for(int i=1;i<=n;i++){
for(int j=0;j<(1<<m);j++){
if(!(b&j)&&vis[b|j])dp[i][j]+=dp[i-1][b];
}
}
}
cout<<dp[n][0]<<endl;
}
return 0;
}