Equidistant Vertices-树型dp-Codeforces Round #734 (Div. 3)

简介: DescriptionA tree is an undirected connected graph without cycles.You are given a tree of n vertices. Find the number of ways to choose exactly k vertices in this tree (i. e. a k-element subset of vertices) so that all pairwise distances between the selected vertices are equal (in other words,

Description


A tree is an undirected connected graph without cycles.


You are given a tree of n vertices. Find the number of ways to choose exactly k vertices in this tree (i. e. a k-element subset of vertices) so that all pairwise distances between the selected vertices are equal (in other words, there exists an integer c such that for all u,v (u≠v, u,v are in selected vertices) du,v=c, where du,v is the distance from u to v).


Since the answer may be very large, you need to output it modulo 109+7.


Input


The first line contains one integer t (1≤t≤10) — the number of test cases. Then t test cases follow.


Each test case is preceded by an empty line.


Each test case consists of several lines. The first line of the test case contains two integers n and k (2≤k≤n≤100) — the number of vertices in the tree and the number of vertices to be selected, respectively. Then n−1 lines follow, each of them contains two integers u and v (1≤u,v≤n, u≠v) which describe a pair of vertices connected by an edge. It is guaranteed that the given graph is a tree and has no loops or multiple edges.


Output


For each test case output in a separate line a single integer — the number of ways to select exactly k vertices so that for all pairs of selected vertices the distances between the vertices in the pairs are equal, modulo 109+7 (in other words, print the remainder when divided by 1000000007).


Example


input


3
4 2
1 2
2 3
2 4
3 3
1 2
2 3
5 3
1 2
2 3
2 4
4 5


output


6
0
1
typedef int itn;
struct node{
  int v,nex;
}e[107 << 1];
int head[107 << 1],cnt;
int n,k;
void init(){
  cnt = 0;
  for(int i=0;i<(107<<1);i++) head[i] = -1;
}
void add(int u,int v){
  e[cnt].v = v;
  e[cnt].nex = head[u];
  head[u] = cnt ++;
}
int siz[107];
bool vis[107];
int dp[107][107];
void dfs(int u,int fa,int dep,int pnt){
  vis[u] = 1;
  if(dep == pnt){
    siz[u] ++;
    return;
  }
  for(int i=head[u];~i;i=e[i].nex){
    int to = e[i].v;
    if(to == fa) continue;
    dfs(to,u,dep+1,pnt);
    siz[u] += siz[to];
  }
}
int main()
{
  int _ = read;
  while(_ --){
    n = read,k = read;
    init();
    for(int i=1;i<n;i++){
      int u = read,v = read;
      add(u,v);
      add(v,u);
    }
    ll ans = 0;
    if(k == 2){
      ans = n * (n - 1) / 2 % mod;
      printf("%lld\n",ans);
      continue;
    }
    for(int i=1;i<=n;i++){
      for(int j=1;j<=n;j++){
        memset(vis,0,sizeof vis);
        memset(siz,0,sizeof siz);
        memset(dp,0,sizeof dp);
        dfs(i,0,0,j);
        dp[0][0] = 1;
        int it = 0;
        for(int tj = head[i];~tj;tj=e[tj].nex){
          int to = e[tj].v;
          if(siz[to] == 0) continue;
          for(int kk=0;kk<=it;kk++){
            dp[it+1][kk] += dp[it][kk];
            dp[it+1][kk] %= mod;
            dp[it+1][kk+1] += dp[it][kk] * siz[to] % mod;
            dp[it+1][kk+1] %= mod;
          }
          it ++;
        }
        ans += dp[it][k];
        ans %= mod;
      }
    }
    printf("%lld\n",ans);
  }
    return 0;
}




目录
相关文章
|
8月前
|
机器学习/深度学习 人工智能 移动开发
.Codeforces Round 883 (Div. 3)
Codeforces Round 883 (Div. 3)
|
6月前
Codeforces Round #186 (Div. 2)A、B、C、D、E
Ilya得到了一个礼物,可以在删掉银行账户最后和倒数第二位的数字(账户有可能是负的),也可以不做任何处理。
22 0
|
8月前
|
人工智能 算法 BI
Codeforces Round 891 (Div. 3)
Codeforces Round 891 (Div. 3)
92 0
Codeforces Round 891 (Div. 3)
|
8月前
|
机器学习/深度学习 人工智能
Codeforces Round 889 (Div. 2)
Codeforces Round 889 (Div. 2)
129 0
|
9月前
|
人工智能
Codeforces Round #786 (Div. 3)(A-D)
Codeforces Round #786 (Div. 3)(A-D)
54 0
|
11月前
Codeforces Round 640 (Div. 4)
Codeforces Round 640 (Div. 4)A~G
65 0
|
索引
Codeforces Round 817 (Div. 4)
Codeforces Round 817 (Div. 4)A~G题解
86 0
Codeforces Round 849 (Div. 4)
Codeforces Round 849 (Div. 4)A~G2题解
83 0
Codeforces Round #675 (Div. 2) A~D
Codeforces Round #675 (Div. 2) A~D
99 0