#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e5 + 5, mod = 1e9 + 7;
vector<int> adj[maxn];
int state1[maxn], c1[maxn];
int cntl[maxn], sumc[maxn], sumcl[maxn];
int state[maxn], c[maxn];
int binpow(int a, int b){
int res = 1;
while(b){
if(b & 1) res = res * a % mod;
a = a * a % mod;
b /= 2;
}
return res;
}
void dfs1(int u, int p){
for(int v: adj[u]){
if(v == p) continue;
dfs1(v, u);
sumc[u] += c1[v];
if(state1[v] == 0){
cntl[u]++;
sumcl[u] += c1[v];
}
}
if(cntl[u] == 0){
state1[u] = 0;
c1[u] = sumc[u] + 1; //
}else{
state1[u] = 1;
c1[u] = (cntl[u] == 1) ? sumcl[u] : 0;
}
}
void dfs2(int u, int p, int pstate, int pcnt){
int totl = cntl[u] + (pstate == 0);
int tot = sumc[u] + pcnt;
if(totl == 0){
state[u] = 0;
c[u] = tot + 1;
}else{
state[u] = 1;
if(totl == 1) c[u] = (pstate == 0) ? pcnt : sumcl[u];
else c[u] = 0;
}
for(int v: adj[u]) {
if(v == p) continue;
int out = totl - (state1[v] == 0);
if(out == 0) dfs2(v, u, 0, 1 + tot - c1[v]);
else{
int ncnt;
if(out == 1){
if(pstate == 0) ncnt = pcnt;
else ncnt = sumcl[u] - ((state1[v] == 0) ? c1[v] : 0);
}else ncnt = 0;
dfs2(v, u, 1, ncnt);
}
}
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, d; cin >> n >> d;
if(n == 2){
cout << binpow(4, d);
return 0;
}
for(int i = 1; i <= n - 1; i++){
int u, v; cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs1(1, 0);
dfs2(1, 0, 1, 0);
int cnt = 0, sumw = 0, suml = 0;
for(int i = 1; i <= n; i++){
if(state[i] == 0){
cnt++;
suml = (suml + c[i]) % mod;
}else sumw = (sumw + c[i]) % mod;
}
int delta = (sumw - suml + mod) % mod, e = cnt, s = 1;
for(int i = 1; i <= d - 1; i++){
s = s * n % mod * n % mod;
e = (cnt * s + e * delta) % mod;
}
int ways = (c[1] * e) % mod;
int ans = 0;
if(state[1] == 0) ans = ways;
else ans = (n * n - ways + mod) % mod;
cout << ans;
}