Tree Cutting

Accepts: 14
Submissions: 119
Time Limit: 4000/2000 MS (Java/Others)
Memory Limit: 262144/131072 K (Java/Others)
问题描述
Byteasar有一棵$n$个点的无根树,节点依次编号为$1$到$n$,其中节点$i$的权值为$v_i$。

定义一棵树的价值为它所有点的权值的异或和。

现在对于每个$[0,m)$的整数$k$,请统计有多少$T$的非空连通子树的价值等于$k$。

一棵树$T$的连通子树就是它的一个连通子图,并且这个图也是一棵树。
输入描述
第一行包含一个正整数$T(1\leq T\leq10)$,表示测试数据的组数。

每组数据的第一行包含两个正整数$n(n\leq 1000)$和$m(1\leq m\leq 2^{10})$,分别表示树的大小以及权值的上界。

第二行包含$n$个整数$v_1,v_2,v_3,...,v_n(0\leq v_i < m)$,分别表示每个节点的权值。

接下来$n-1$行每行包含两个正整数$a_i,b_i(1\leq a_i,b_i\leq n)$,表示有一条连接$a_i$和$b_i$的无向边。

输入数据保证$m$是$2$的非负整数幂。
输出描述
对于每组数据,输出一行$m$个整数,其中第$i$个整数表示价值为$i$的非空连通子树的数目。

因为答案很大,所以请模$10^9+7$后输出。
输入样例
2
4 4
2 0 1 3
1 2
1 3
1 4
4 4
0 1 3 1
1 2
1 3
1 4
输出样例
3 3 2 3
2 4 2 3