#include<bits/stdc++.h>
using namespace std;

const long long MaxN = 1e5 + 5,MaxK = 1e2 + 5;

long long n,k,dp[MaxN][MaxK][2];
vector<long long> a[MaxN];

// 0 là điểm cuối
// 1 là điểm nối
void dfs(long long u, long long par)
{
    dp[u][0][0]=1;

    for (long long v : a[u])
    {
        if(v==par) continue;

        dfs(v,u);

        for (long long t=0; t<=k-2; t++)
        {
            dp[u][k][1]+=dp[v][t][0]*dp[u][k-1-t][0];
        }

        for (long long i=1; i<=k; i++)
        {
            dp[u][i][0]+=dp[v][i-1][0];
        }
    }
}

void input()
{
    cin >> n >> k;

    for (long long i=1; i<n; i++)
    {
        long long u,v;
        cin >> u >> v;

        a[u].push_back(v);
        a[v].push_back(u);
    }
}

void solve()
{
    dfs(1,-1);

    long long ans=0;

    for (long long i=1; i<=n; i++)
    {
        ans+=dp[i][k][0];
        ans+=dp[i][k][1];
    }

    cout << ans;
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    input();
    solve();
}
