#include <bits/stdc++.h>
using namespace std;
long long int ch;
vector<long long int> v[200000];
bool vis[200000];
void dfs(long long int s) {
  vis[s] = 1;
  ch++;
  for (long long int i = 0; i < v[s].size(); i++) {
    if (vis[v[s][i]] == false) dfs(v[s][i]);
  }
}
long long int N = 1000000007;
long long int power(long long int x, long long int y) {
  long long int res = 1;
  x = x % N;
  while (y > 0) {
    if (y & 1) res = (res * x) % N;
    y = y / 2;
    x = (x * x) % N;
  }
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, k;
  cin >> n >> k;
  for (long long int i = 0; i < n - 1; i++) {
    long long int x, y, w;
    cin >> x >> y >> w;
    x--;
    y--;
    if (w == 0) {
      v[x].push_back(y);
      v[y].push_back(x);
    }
  }
  long long int ans = power(n, k);
  for (long long int i = 0; i < n; i++) {
    if (vis[i] == false) {
      ch = 0;
      dfs(i);
      ans = (ans % N - power(ch, k) % N + N) % N;
    }
  }
  cout << ans;
}
