Pagini recente » Cod sursa (job #1738602) | Cod sursa (job #2679743) | Cod sursa (job #444327) | Cod sursa (job #2630569) | Cod sursa (job #2023312)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
const int MOD = 1e9 + 7;
FILE *fin, *fout;
vector < int > G[MAXN];
int k, n;
bool seen[MAXN];
long long ans = 1;
inline long long arrangements(int right, int left) {
long long res = 1;
if (left == 0)
return 1LL;
for (int i = right; i > right - left; i--)
res = (res * i) % MOD;
return res;
}
void DFS( int node, int dad ) {
seen[ node ] = 1;
int nr = 0;
for (int son: G[ node ])
if (!seen[son])
nr++, DFS( son, node );
if (!dad)
ans = (ans * arrangements(k, nr)) % MOD;
else
ans = (ans * arrangements(k-1, nr)) % MOD;
}
int main()
{
fin = fopen( "colorare3.in", "r" );
fout= fopen( "colorare3.out","w" );
int x, y;
fscanf( fin, "%d%d", &n, &k );
for (int i = 1; i < n; i++) {
fscanf( fin, "%d%d", &x, &y );
G[ x ].push_back( y );
G[ y ].push_back( x );
}
DFS( 1, 0 );
fprintf( fout, "%lld", ans );
fclose( fin );
fclose( fout );
return 0;
}