#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 1e9+7;
const int N = 2005;
int n, d, tin[N], tout[N], timer;
vector<int> mx;
vector<vector<int>> adj, P;
ll ans;
vector<vector<vector<ll>>> dp;
void dfs1(int u, int p) {
tin[u] = ++timer;
for (int v : adj[u]) {
if (v == p) continue;
dfs1(v, u);
}
tout[u] = timer;
}
void dfs2(int u, int p) {
dp[u][0][0] = dp[u][1][0] = 1;
mx[u] = 0;
for (int v : adj[u]) {
if (v == p) continue;
dfs2(v, u);
for (int j = 3; j >= 1; j--) {
int K = min(d - 1, (j - 1) * mx[u]);
for (int k = K; k >= 0; k--) {
if (!dp[u][j - 1][k]) continue;
for (int len = 0; len <= mx[v]; len++) {
int nd = len + 1;
if (k + nd >= d) break;
dp[u][j][k + nd] += dp[u][j - 1][k] * dp[v][1][len];
}
}
}
mx[u] = max(mx[u], mx[v] + 1);
}
ans += dp[u][3][d - 1];
for (int k = 0; k < d; k++) {
int r = d - k - 1;
if (r >= 0 && r < d) ans += dp[u][2][k] * P[u][r];
}
}
void solve() {
cin >> n >> d;
adj.assign(n + 1, vector<int>());
for (int i = 0; i < n - 1; i++) {
int u, v; cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
vector<vector<int>> dist(n + 1, vector<int>(n + 1, -1));
for (int i = 1; i <= n; i++) {
dist[i][i] = 0;
queue<int> q;
q.push(i);
while (!q.empty()) {
int u = q.front(); q.pop();
for (int v : adj[u])
if (dist[i][v] == -1) {
dist[i][v] = dist[i][u] + 1;
q.push(v);
}
}
}
timer = 0;
dfs1(1, 0);
P.assign(n + 1, vector<int>(d, 0));
for (int u = 1; u <= n; u++)
for (int v = 1; v <= n; v++) {
if (tin[u] <= tin[v] && tin[v] <= tout[u]) continue;
int len = dist[u][v];
if (len < d) P[u][len]++;
}
mx.assign(n + 1, 0);
dp.assign(n + 1, vector<vector<ll>>(4, vector<ll>(d, 0)));
ans = 0;
dfs2(1, 0);
cout << ans << "\n";
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int tests = 1; cin >> tests;
while (tests--) solve();
#ifndef ONLINE_JUDGE
cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVzaW5nIGxsID0gbG9uZyBsb25nOwoKY29uc3QgaW50IE1PRCA9IDFlOSs3Owpjb25zdCBpbnQgTiA9IDIwMDU7CgppbnQgbiwgZCwgdGluW05dLCB0b3V0W05dLCB0aW1lcjsKdmVjdG9yPGludD4gbXg7CnZlY3Rvcjx2ZWN0b3I8aW50Pj4gYWRqLCBQOwpsbCBhbnM7CnZlY3Rvcjx2ZWN0b3I8dmVjdG9yPGxsPj4+IGRwOwoKdm9pZCBkZnMxKGludCB1LCBpbnQgcCkgewogICAgdGluW3VdID0gKyt0aW1lcjsKICAgIGZvciAoaW50IHYgOiBhZGpbdV0pIHsKICAgICAgICBpZiAodiA9PSBwKSBjb250aW51ZTsKICAgICAgICBkZnMxKHYsIHUpOwogICAgfQogICAgdG91dFt1XSA9IHRpbWVyOwp9Cgp2b2lkIGRmczIoaW50IHUsIGludCBwKSB7CiAgICBkcFt1XVswXVswXSA9IGRwW3VdWzFdWzBdID0gMTsKICAgIG14W3VdID0gMDsKICAgIGZvciAoaW50IHYgOiBhZGpbdV0pIHsKICAgICAgICBpZiAodiA9PSBwKSBjb250aW51ZTsKICAgICAgICBkZnMyKHYsIHUpOwogICAgICAgIGZvciAoaW50IGogPSAzOyBqID49IDE7IGotLSkgewogICAgICAgICAgICBpbnQgSyA9IG1pbihkIC0gMSwgKGogLSAxKSAqIG14W3VdKTsKICAgICAgICAgICAgZm9yIChpbnQgayA9IEs7IGsgPj0gMDsgay0tKSB7CiAgICAgICAgICAgICAgICBpZiAoIWRwW3VdW2ogLSAxXVtrXSkgY29udGludWU7CiAgICAgICAgICAgICAgICBmb3IgKGludCBsZW4gPSAwOyBsZW4gPD0gbXhbdl07IGxlbisrKSB7CiAgICAgICAgICAgICAgICAgICAgaW50IG5kID0gbGVuICsgMTsKICAgICAgICAgICAgICAgICAgICBpZiAoayArIG5kID49IGQpIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRwW3VdW2pdW2sgKyBuZF0gKz0gZHBbdV1baiAtIDFdW2tdICogZHBbdl1bMV1bbGVuXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBteFt1XSA9IG1heChteFt1XSwgbXhbdl0gKyAxKTsKICAgIH0KCiAgICBhbnMgKz0gZHBbdV1bM11bZCAtIDFdOwogICAgZm9yIChpbnQgayA9IDA7IGsgPCBkOyBrKyspIHsKICAgICAgICBpbnQgciA9IGQgLSBrIC0gMTsKICAgICAgICBpZiAociA+PSAwICYmIHIgPCBkKSBhbnMgKz0gZHBbdV1bMl1ba10gKiBQW3VdW3JdOwogICAgfQp9Cgp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IG4gPj4gZDsKICAgIGFkai5hc3NpZ24obiArIDEsIHZlY3RvcjxpbnQ+KCkpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CiAgICAgICAgaW50IHUsIHY7IGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBhZGpbdl0ucHVzaF9iYWNrKHUpOwogICAgfQoKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gZGlzdChuICsgMSwgdmVjdG9yPGludD4obiArIDEsIC0xKSk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBkaXN0W2ldW2ldID0gMDsKICAgICAgICBxdWV1ZTxpbnQ+IHE7CiAgICAgICAgcS5wdXNoKGkpOwogICAgICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgICAgIGludCB1ID0gcS5mcm9udCgpOyBxLnBvcCgpOwogICAgICAgICAgICBmb3IgKGludCB2IDogYWRqW3VdKQogICAgICAgICAgICAgICAgaWYgKGRpc3RbaV1bdl0gPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICBkaXN0W2ldW3ZdID0gZGlzdFtpXVt1XSArIDE7CiAgICAgICAgICAgICAgICAgICAgcS5wdXNoKHYpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICB0aW1lciA9IDA7CiAgICBkZnMxKDEsIDApOwoKICAgIFAuYXNzaWduKG4gKyAxLCB2ZWN0b3I8aW50PihkLCAwKSk7CiAgICBmb3IgKGludCB1ID0gMTsgdSA8PSBuOyB1KyspCiAgICAgICAgZm9yIChpbnQgdiA9IDE7IHYgPD0gbjsgdisrKSB7CiAgICAgICAgICAgIGlmICh0aW5bdV0gPD0gdGluW3ZdICYmIHRpblt2XSA8PSB0b3V0W3VdKSBjb250aW51ZTsKICAgICAgICAgICAgaW50IGxlbiA9IGRpc3RbdV1bdl07CiAgICAgICAgICAgIGlmIChsZW4gPCBkKSBQW3VdW2xlbl0rKzsKICAgICAgICB9CgogICAgbXguYXNzaWduKG4gKyAxLCAwKTsKICAgIGRwLmFzc2lnbihuICsgMSwgdmVjdG9yPHZlY3RvcjxsbD4+KDQsIHZlY3RvcjxsbD4oZCwgMCkpKTsKICAgIGFucyA9IDA7CiAgICBkZnMyKDEsIDApOwogICAgY291dCA8PCBhbnMgPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsKCiAgICBpbnQgdGVzdHMgPSAxOyBjaW4gPj4gdGVzdHM7CiAgICB3aGlsZSAodGVzdHMtLSkgc29sdmUoKTsKCiAgICAjaWZuZGVmIE9OTElORV9KVURHRQogICAgY2VyciA8PCAiXG5UaW1lIGVsYXBzZWQ6ICIgPDwgMS4wICogY2xvY2soKSAvIENMT0NLU19QRVJfU0VDIDw8ICIgcy5cbiI7CiAgICAjZW5kaWYKCiAgICByZXR1cm4gMDsKfQ==