Pagini recente » Cod sursa (job #108573) | Cod sursa (job #877394) | Cod sursa (job #992618) | Cod sursa (job #140611) | Cod sursa (job #456269)
Cod sursa(job #456269)
#include <cstdio>
#include <cassert>
#include <vector>
using namespace std;
#define FOR(i, s, d) for(i = (s); i < (d); ++i)
#define pb push_back
#define nmax 100111
#define MOD 1000000007
#define sz size()
#define lint long long
vector<int> G[nmax];
int n, k, H[nmax];
int doit(int i, int p)
{
int j, z = (i == 0 ? 0 : 1);
H[i] = 1;
FOR(j, 0, G[i].sz)
if(G[i][j] != p)
{
H[i] = ((lint)H[i] * doit(G[i][j], i)) % MOD;
H[i] = ((lint)H[i] * (k - j - z)) % MOD;
}
else
z -= 1;
return H[i];
}
int main()
{
int i, j, ii;
freopen("colorare3.in", "r", stdin);
freopen("colorare3.out", "w", stdout);
assert(scanf("%d %d", &n, &k) == 2);
assert(1 <= n && n <= 100000);
assert(1 <= k && k <= 1000000000);
FOR(ii, 1, n)
{
assert(scanf("%d %d", &i, &j) == 2);
i--, j--;
assert(0 <= i && i < n);
assert(0 <= j && j < n);
G[i].pb(j), G[j].pb(i);
}
printf("%d\n", doit(0, 0));
return 0;
}