#include "bits/stdc++.h"
using namespace std;
#define ln '\n'
#define int long long
const int MOD = 1e9 + 7;
enum{WIN, LOSS};
void dfs(int u, int p, vector<int>& state,
const vector<vector<int>>& adj){
state[u] = LOSS;
for (auto v: adj[u]){
if (v == p) continue;
dfs(v, u, state, adj);
if (state[v] == LOSS) state[u] = WIN;
}
}
int binpow(int base, int e){
int res = 1;
while (1){
if (e & 1) res = (res * base) % MOD;
if (e <= 1) break;
base = (base * base) % MOD;
e /= 2;
}
return res;
}
void solve(){
int n, k; cin >> n >> k;
vector<vector<int>> adj(n+1);
for (int i = 0; i < n-1; i++){
int u, v; cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
int w, l; w = l = 0;
vector<int> state(n+1);
dfs(1, -1, state, adj);
for (int i = 1; i <= n; i++){
if (state[i] == WIN) w++;
else l++;
}
int z = binpow(n, k-1);
array<int,2> res;
if (k & 1){
res = {z * l, z * w};
} else {
res = {z * w, z* l};
}
int ans;
if (state[1] == LOSS){
ans = res[WIN] * l % MOD;
} else {
ans = (res[WIN] + res[LOSS]) * w % MOD;
ans += res[WIN] * l % MOD;
}
ans %= MOD; ans += MOD; ans %= MOD;
cout << ans << ln;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int _ = 1;
// cin >> _;
while (_--) solve();
return 0;
}