#include<cstdio>
#include<vector>
#include<set>
#include<cstring>
#include<map>
#include<cassert>
#include<algorithm>
using namespace std;
typedef unsigned uu;
typedef unsigned long long u64;
typedef pair<uu,uu> puu;
typedef vector<uu> vuu;
const uu mo = 1000000007;
#define fec(i,c) for(__typeof(c.end()) i=c.begin();i!=c.end();++i)

uu n,m;
set <uu> e[50000];
map<vuu,uu> lbs;
set<puu > dup;
uu lb[50000],lc[50000],ld[50000],di[50000],p[50000],rev[50001],zb;
vuu tmp;
u64 pow(uu x,uu n){
	u64 ret =1;
	for(u64 a = x;n;n>>=1){
		if(n&1)ret = ret * a % mo;
		a = a* a %mo;
	}
	return ret;
}
u64 ca(uu a,uu n){// C(a+n-1,n)
	u64 ret = 1;
	for(uu i=1,k =a+n-1;i<=n;++i)
		ret = ret * (k--) % mo  * rev[i] % mo; 
	return ret;
}
void gao(uu lf){
	tmp.clear();
	fec(v,e[lf])if(!~p[*v]){
		p[lf] = *v;
		dup.erase(puu(di[*v],*v));
		dup.insert(puu(--di[*v],*v));
	}else{
		tmp.push_back(lb[*v]);
	}
	sort(tmp.begin(),tmp.end());
	static __typeof(lbs.end()) lbsit;
	if((lbsit = lbs.find(tmp)) != lbs.end())
		lb[lf]=lbsit->second;
	else{
		uu ans = m;
		for(uu i = 0,j=1;i<tmp.size();i=j){
			for(;j<tmp.size() && tmp[j]==tmp[i];++j);
			ans = ans * ca( lc[tmp[i]],j-i) % mo;
		}
		lbs[tmp] = lb[lf] = zb;
		lc[zb++] = ans;
	}
}
int main(){
	memset(p,0xff,sizeof(p));
	rev[0]=1;
	for(uu i=1;i<=50000;++i)rev[i]=pow(i,mo-2)% mo;
	for(;scanf("%u%u",&n,&m)==2;){
		for(uu i=1,x,y;i<n;++i){
			scanf("%u%u",&x,&y);
			--x;--y;
			e[x].insert(y);
			e[y].insert(x);
		}
		lbs [vuu()] = 0;lc[0]=m;zb =1;
		for(uu i=0;i<n;++i)
			dup.insert(puu(di[i]=e[i].size(),i));
		for(uu lf,nc;dup.size()>2;){
			vector<uu> tf;
			for( ;1==dup.begin()->first;dup.erase(dup.begin()))
				tf.push_back(dup.begin()->second);
			fec(a,tf)gao(*a);
		}
		uu ans;
		if(dup.size()==2){
			uu a =dup.begin()->second,
			   b =dup.rbegin()->second;
			p[b]=~0;gao(a);
			p[a]=~0;gao(b);
			if(lb[a]!=lb[b])
				ans = (u64) lc[lb[a]] * lc[lb[b]] % mo;
			else ans = ca(lc[lb[a]],2);
		}else{
			gao(dup.begin()->second);
			ans = lc[lb[dup.begin()->second]];
		}
		printf("%u\n",ans);
		lbs.clear();
		dup.clear();
		for(int i=0;i<n;++i){
			e[i].clear();
			p[i]=~0u;
		}
	}
}
