设G是p个对象的一个置换群,用m种颜色涂染p个对象,则不同染色方案为:
其中G={g1,…gs} c(gi )为置换gi的循环节数(i=1…s)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define MOD 10007
int quickpow(int a,int b)
{
int t =1;
while (b >0)
{
if (b &1)
t = (t*a)%MOD;
b = b >>1 ;
a = (a*a)%MOD;
}
return t;
}
int main()
{
int T,k;
scanf("%d",&T);
for(int ca=1; ca<=T; ca++)
{
scanf("%d",&k);
int ans=quickpow(k,54+12+8);//不变置换
ans=((ans+(6*quickpow(k,15+3+2))%MOD)%MOD+(3*quickpow(k,28+6+4))%MOD)%MOD;//沿对面中点轴旋转90、270度
ans=(ans+(6*quickpow(k,27+7+4))%MOD)%MOD;//沿对边中心轴旋转180度
ans=(ans+(8*quickpow(k,18+4+4))%MOD)%MOD;//沿对角线旋转120、240度
ans=(ans*quickpow(24,MOD-2))%MOD;
printf("Case %d: %d\n",ca,ans);
}
return 0;
}