#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;
}