#include using namespace std; const int64_t MOD = 1e9+7; void add(int64_t& a, int64_t b){ a = (a+b) % MOD; } void mul(int64_t& a, int64_t b){ a = a*b % MOD; } int main(){ int N, C; cin >> N >> C; vector edges[1000]; for(int i=0; i> a >> b; a--; b--; edges[a].push_back(b); edges[b].push_back(a); } C--; int64_t ans = 0; for(int r=0; r<3; r++){ int M = (C-r)/3 + 1; vector> dp(N, vector(2*N+1, -1)); auto rec = [&](auto&& rec, int i, int p, int v)->int64_t{ if(v < 0 || v >= M) return 0; if(dp[i][v] != -1) return dp[i][v]; int64_t res = 1; for(int j : edges[i]) if(j != p){ mul(res, rec(rec, j, i, v-1) + rec(rec, j, i, v+1)); } dp[i][v] = res; return res; }; for(int i=0; i<=N; i++) dp[0][i] = rec(rec, 0, -1, i); int64_t res = 0; if(M <= 2*N){ for(int i=0; i