Cod sursa(job #466122)
#include <fstream>
using namespace std;
struct list{int x,y;};
list c[1<<17];
int v[1<<17],f[1<<17],n,k;
bool fix[1<<17];
const int mod=1000000007;
ifstream in("colorare3.in");
ofstream out ("colorare3.out");
long long a(int n,int k)
{
int s=1;
for (int i=n-k+1;i<=n;i++)
s=(s*i)%mod;
return s;
}
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
long long sol;
int x,i;
in>>n>>k;
for (i=1;i<n;i++)
{
in>>c[i].x>>c[i].y;
f[c[i].x]++;
f[c[i].y]++;
}
x=1;
for (i=2;i<=n;i++)
if (f[x]<f[i])
x=i;
fix[x]=true;
for (i=1;i<n;i++)
{
if (fix[c[i].x])
{
v[c[i].x]++;
fix[c[i].y]=true;
continue;
}
if (fix[c[i].y])
{
fix[c[i].x]=true;
v[c[i].y]++;
continue;
}
fix[c[i].x]=true;
fix[c[i].y]=true;
v[c[i].x]=1;
}
sort(v+1,v+n+1,cmp);
sol=a(k,v[1]);k--;
for (i=2;v[i];i++)
sol=(sol*a(k,v[i]))%mod;
out<<sol<<"\n";
return 0;
}