#include <bits/stdc++.h>
#define pb push_back
#define FOR(i,l,r) for(int i=(l);i<=(r);i++)
using namespace std;
typedef long long LL;
const LL MOD=1e9+7;
const int maxn=200001;

inline LL mul(LL a,LL b) { return a*b%MOD; }

int n;
vector<int> sd[maxn];

int jl[maxn],tot; int fa[maxn];
int sz[maxn];

LL fact[maxn];
LL f[maxn];
void init() {
	FOR (i,1,n) {
		sd[i].clear();
		fa[i]=-1;
	}
}
int main() {
	fact[0]=1;
	for (int i=1;i<=100000;i++) fact[i]=fact[i-1]*i%MOD;

	int T; scanf("%d",&T);
	for (int tt=1;T--;tt++) {
		scanf("%d",&n);
		init();
		for (int i=1,u,v;i<n;i++) {
			scanf("%d%d",&u,&v);
			sd[u].pb(v); sd[v].pb(u);
		}

		fa[ jl[tot=1]=1 ] = -1;
		for (int i=1,u;i<=n;i++) {
			u=jl[i];
			for (int e=sd[u].size()-1,v;~e;e--) {
				if ((v=sd[u][e])!=fa[u]) {
					fa[v]=u; jl[++tot]=v;
				}
			}
		}

		for (int i=n,u;i;i--) {
			u=jl[i]; sz[u]=1;
			int gs=0,sandian=0;
			LL f1,f2;
			for (int e=sd[u].size()-1,v;~e;e--) {
				if (fa[u]==(v=sd[u][e])) continue;
				sz[u]+=sz[v];
				if (sz[v]!=1) {
					gs++;
					f2=f1,f1=f[v];
				}
				else sandian++;
			}
			if (gs>2) {
				printf("Case #%d: 0\n",tt);
				goto end;
			}
			else if (gs==2) {
				f[u]=mul(mul(f1,f2),fact[sandian]);
			}
			else if (gs==1) {
					f[u]=mul(mul(f1,fact[sandian]),2);
				/*if (sandian) {
					f[u]=mul(mul(f1,fact[sandian]),2);
				}
				else {
					f[u]=mul(f1,2);
				}*/
			}
			else if (sandian) {
				f[u]=mul(fact[sandian],2);
			}
			else f[u]=1;  //--
			//cout<<u<<" "<<gs<<" "<<f[u]<<" "<<have[u]<<endl;
		}
		printf("Case #%d: %lld\n",tt,f[1]);
end:;
	}
	return 0;
}

/*
	希望你能倾向于多考虑几种情况。
*/