Pagini recente » Profil oldatlantian | Istoria paginii fmi-no-stress-9/solutii | Rezervatie Naturala | Cod sursa (job #384776) | Cod sursa (job #374996)
Cod sursa(job #374996)
#include <fstream>
#include <vector>
using namespace std;
#define PB push_back
typedef long long lint;
const int MOD = 1000000007;
const int NMAX = 100007;
int N, K, result = 1;
vector <int> G[NMAX];
int A[NMAX], A1[NMAX];
void read(void) {
ifstream fin("colorare3.in");
int i, a, b;
fin >> N >> K;
for (i = 1; i < N; ++i) {
fin >> a >> b;
G[a].PB(b);
G[b].PB(a);
}
fin.close();
}
void DFS(int k, int t) {
if (k == 1) {
result = (lint) result * A1[ G[k].size() ] % MOD;
} else {
result = (lint) result * A[ G[k].size() - 1 ] % MOD;
}
int i;
for (i = 0; i < (int) G[k].size(); ++i)
if (G[k][i] != t)
DFS(G[k][i], k);
}
void solve(void) {
int i;
A[0] = A1[0] = 1;
// printf("0: %d %d\n", A[0], A1[0]);
for (i = 1; i <= N; ++i) {
A[i] = ((lint) A[i-1] * (K - i)) % MOD;
A1[i] = ((lint) A1[i-1] * (K - i + 1)) % MOD;
// printf("%d: %d %d\n", i, A[i], A1[i]);
}
DFS(1, 0);
}
void write(void) {
ofstream fout("colorare3.out");
fout << result << '\n';
fout.close();
}
int main(void) {
read();
solve();
write();
return 0;
}