#pragma comment(linker, "/STACK:102400000,102400000")#include <iostream>#include <cstring>#include <algorithm>#include <cstring>#include <vector>#define MAX 100007usingnamespacestd;
typedeflonglong LL;
vector<int> e[MAX];
const LL mod = 1e9+7;
LL dp[MAX];
LL fac[MAX];
int t,n,x,y;
void add ( int u , int v )
{
e[u].push_back ( v );
e[v].push_back ( u );
}
void init ( )
{
for ( int i = 0 ; i < MAX ; i++ )
e[i].clear();
}
void dfs ( int u , int p )
{
int num = 0, total = 0;
dp[u] = 1;
for ( int i = 0 ; i < e[u].size() ; i++ )
{
int v = e[u][i];
if ( v == p ) continue;
else total++;
dfs ( v , u );
if ( e[v].size() == 1 ) num++;
dp[u] *= dp[v];
dp[u] %= mod;
}
if ( total == 0 ) return;
dp[u] *= fac[num];
dp[u] %= mod;
if ( total - num < 2 )
{
dp[u] *= 2LL;
dp[u] %= mod;
}
if ( total - num > 2 )
dp[u] = 0;
}
int main ( )
{
scanf ( "%d" , &t );
fac[0] = 1;
for ( LL i = 1 ; i < MAX ; i++ )
{
fac[i] = fac[i-1]*i;
fac[i] %= mod;
}
int cc = 1;
while ( t-- )
{
init ();
scanf ( "%d" , &n );
for ( int i = 1 ; i < n ; i++ )
{
scanf ( "%d%d" , &x , &y );
add ( x , y );
}
dfs ( 1 , -1 );
printf ( "Case #%d: " , cc++ );
printf ( "%I64d\n" , dp[1] );
}
}