比赛的时候没写出来,别人讲给我听的时候还是感觉比较简单。。比赛的时候压根想不到是个DP啊。。。DP要是能看出来时个DP那就成功了一半了。。。

#include <iostream>
#include <sstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <climits>
#define maxn 60
#define eps 1e-6
#define mod 200000007
#define INF 99999999
#define lowbit(x) (x&(-x))
#define lson o<<1, L, mid
#define rson o<<1 | 1, mid+1, R
typedef long long LL;
using namespace std;

LL dp[500][2000];
int main(void)
{
	int _, i, j, n, m, k, __;
	LL ans;
	while(scanf("%d",&_)!=EOF){
		__=0;
		while(_--){
			scanf("%d%d",&n,&m);
			memset(dp, 0, sizeof dp);
			dp[0][0]=1;
			int tmp=1<<m;
			for(i=0;i<n;i++)
				for(j=0;j<tmp;j++)
					if(dp[i][j])
						for(k=0;k<m;k++)
							dp[i+1][j | (1<<k)]=(dp[i+1][j | (1<<k)]+dp[i][j])%mod;
			ans=0;
			for(i=1;i<tmp-1;i++)
				ans=(ans+dp[n][i])%mod;
			printf("Case %d: %lld\n", ++__, ans);
		}
	}
	return 0;
}