代码:
#include<bits/stdc++.h>
#define int long long
#define pi 3.14159265358979323
using namespace std;
typedef long long ll;
const int N=200010;
const int mod=1e9+7;
int qpow(int a,int b)
{
if(b==0) return 1;
if(b&1) return a*qpow(a,b-1)%mod;
else
{
int mul=qpow(a,b/2);
return mul*mul%mod;
}
}
int dp[50][500];
int cy(int x,int y)
{
return x*qpow(y,mod-2)%mod;
}
signed main()
{
int t;
cin>>t;
for(int i=3;i<=140;i++)
{
dp[1][i]=(1+cy(i-3,i)*dp[1][i-1])%mod;
}
for(int i=2;i<=13;i++)
{
for(int j=3*i;j<=140;j++)
{
dp[i][j]=(1+cy(3*i,j)*dp[i-2][j-1]%mod+cy(j-3*i,j)*dp[i][j-1])%mod;
}
}
int cas=0;
while(t--)
{
cas++;
map<string,int> mp;
int res=0;
char ss[15][5];
for(int i=1;i<=13;i++)
{
string s="";
for(int j=1;j<=2;j++)
{
char op;
cin>>op;
ss[i][j]=op;
s+=op;
}
mp[s]++;
}
for(int i=1;i<=13;i++)
{
string s="";
for(int j=1;j<=2;j++)
{
char op=ss[i][j];
s+=op;
}
if(mp[s]==1) res++;
//if(!mp[s]) res++,mp[s]=1;
}
printf("Case #%lld: %lld\n",cas,dp[res][123]);
}
}