// author : Nguyễn Trọng Nguyễn - ITK22 NBK
#include <bits/stdc++.h>
#define ll long long
#define ii pair <int, int>
#define fi first
#define sc second
using namespace std;
const int maxn = (int)2e5;
const int BS = 320;
const int MOD = (int)1e9 + 7;
int n, k, mx;
vector <int> adj[maxn + 5];
int cnt[maxn + 5], sz[maxn + 5];
bool vist[maxn + 5];
ll ans = 0;
int subtree_size (int u, int p = 0) {
sz[u] = 1;
for (auto v : adj[u]) {
if (v == p or vist[v]) continue;
sz[u] += subtree_size(v, u);
}
return sz[u];
}
int find_centroid (int tree_size, int u, int p = 0) {
for (auto v : adj[u]) {
if (vist[v] or v == p) continue;
if (sz[v] > tree_size / 2) return find_centroid(tree_size, v, u);
}
return u;
}
void get (bool type, int u, int p, int dist = 1) {
if (dist > k) return ;
mx = max(mx, dist);
if (!type) cnt[dist]++;
else ans += cnt[k - dist];
for (auto v : adj[u]) {
if (vist[v] or v == p) continue;
get(type, v, u, dist + 1);
}
}
void centroid_decompose (int u) {
int centroid = find_centroid(subtree_size(u), u);
vist[centroid] = true;
mx = 0;
for (auto v : adj[centroid]) {
if (vist[v]) continue;
get(true, v, centroid);
get(false, v, centroid);
}
fill(cnt + 1, cnt + 1 + mx, 0);
for (auto v : adj[centroid]) {
if (vist[v]) continue;
centroid_decompose(v);
}
}
signed main (void) {
cin.tie(0)->sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("test.inp","r",stdin);
freopen("test.out","w",stdout);
#endif
cin >> n >> k;
for (int i = 1; i < n; i++) {
int u, v; cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
cnt[0] = 1;
centroid_decompose(1);
cout << ans;
return 0;
}
Ly8gYXV0aG9yIDogTmd1eeG7hW4gVHLhu41uZyBOZ3V54buFbiAtIElUSzIyIE5CSyAKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiAKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBpaSBwYWlyIDxpbnQsIGludD4KI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNjIHNlY29uZAogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKY29uc3QgaW50IG1heG4gPSAoaW50KTJlNTsKY29uc3QgaW50IEJTID0gMzIwOwpjb25zdCBpbnQgTU9EID0gKGludCkxZTkgKyA3OwogCmludCBuLCBrLCBteDsKdmVjdG9yIDxpbnQ+IGFkalttYXhuICsgNV07CmludCBjbnRbbWF4biArIDVdLCBzelttYXhuICsgNV07CmJvb2wgdmlzdFttYXhuICsgNV07CmxsIGFucyA9IDA7CiAKaW50IHN1YnRyZWVfc2l6ZSAoaW50IHUsIGludCBwID0gMCkgewoJc3pbdV0gPSAxOwoJZm9yIChhdXRvIHYgOiBhZGpbdV0pIHsKCQlpZiAodiA9PSBwIG9yIHZpc3Rbdl0pIGNvbnRpbnVlOwoJCXN6W3VdICs9IHN1YnRyZWVfc2l6ZSh2LCB1KTsKCX0KCXJldHVybiBzelt1XTsKfQogCmludCBmaW5kX2NlbnRyb2lkIChpbnQgdHJlZV9zaXplLCBpbnQgdSwgaW50IHAgPSAwKSB7Cglmb3IgKGF1dG8gdiA6IGFkalt1XSkgewoJCWlmICh2aXN0W3ZdIG9yIHYgPT0gcCkgY29udGludWU7CgkJaWYgKHN6W3ZdID4gdHJlZV9zaXplIC8gMikgcmV0dXJuIGZpbmRfY2VudHJvaWQodHJlZV9zaXplLCB2LCB1KTsKCX0KCXJldHVybiB1Owp9CiAKdm9pZCBnZXQgKGJvb2wgdHlwZSwgaW50IHUsIGludCBwLCBpbnQgZGlzdCA9IDEpIHsKCWlmIChkaXN0ID4gaykgcmV0dXJuIDsKCW14ID0gbWF4KG14LCBkaXN0KTsKIAoJaWYgKCF0eXBlKSBjbnRbZGlzdF0rKzsKCWVsc2UgYW5zICs9IGNudFtrIC0gZGlzdF07CiAKCWZvciAoYXV0byB2IDogYWRqW3VdKSB7CgkJaWYgKHZpc3Rbdl0gb3IgdiA9PSBwKSBjb250aW51ZTsKCQlnZXQodHlwZSwgdiwgdSwgZGlzdCArIDEpOwoJfQp9CiAKdm9pZCBjZW50cm9pZF9kZWNvbXBvc2UgKGludCB1KSB7CglpbnQgY2VudHJvaWQgPSBmaW5kX2NlbnRyb2lkKHN1YnRyZWVfc2l6ZSh1KSwgdSk7Cgl2aXN0W2NlbnRyb2lkXSA9IHRydWU7CglteCA9IDA7CiAKCWZvciAoYXV0byB2IDogYWRqW2NlbnRyb2lkXSkgewoJCWlmICh2aXN0W3ZdKSBjb250aW51ZTsKCQlnZXQodHJ1ZSwgdiwgY2VudHJvaWQpOwoJCWdldChmYWxzZSwgdiwgY2VudHJvaWQpOwoJfQogCglmaWxsKGNudCArIDEsIGNudCArIDEgKyBteCwgMCk7Cglmb3IgKGF1dG8gdiA6IGFkaltjZW50cm9pZF0pIHsKCQlpZiAodmlzdFt2XSkgY29udGludWU7CgkJY2VudHJvaWRfZGVjb21wb3NlKHYpOwoJfQp9CiAKc2lnbmVkIG1haW4gKHZvaWQpIHsKCWNpbi50aWUoMCktPnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgkKCSNpZm5kZWYgT05MSU5FX0pVREdFCglmcmVvcGVuKCJ0ZXN0LmlucCIsInIiLHN0ZGluKTsKCWZyZW9wZW4oInRlc3Qub3V0IiwidyIsc3Rkb3V0KTsKCSNlbmRpZgogCgljaW4gPj4gbiA+PiBrOwoJZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspIHsKCQlpbnQgdSwgdjsgY2luID4+IHUgPj4gdjsKCQlhZGpbdV0ucHVzaF9iYWNrKHYpOwoJCWFkalt2XS5wdXNoX2JhY2sodSk7Cgl9CQogCgljbnRbMF0gPSAxOwoJY2VudHJvaWRfZGVjb21wb3NlKDEpOwoJY291dCA8PCBhbnM7CiAKCXJldHVybiAwOwp9