Clarke and tree

Accepts: 5
Submissions: 5
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
克拉克是一名人格分裂患者。某一天,克拉克分裂成了一个计算机科学家,在研究数据结构。  
现在克拉克有$n$个点,克拉克知道每个点的度不超过$a_i$,现在他想知道,从中选一些点来形成一棵大小为$s(1 \le s \le n)$的树的方案数是多少。  
输入描述
第一行一个整数$T(1 \le T \le 10)$,表示数据的组数。  
每组数据第一行为一个$n(2 \le n \le 50)$。  
接下来有一行$n$个数,每行一个整数$a_i(1 \le a_i < n)$,表示第$i$个点的度数不超过$a_i$。  
输出描述
每组数据输出一行$n$个数,表示选了$s(1 \le s \le n)$个点能组成的树的个数,由于答案太大,所以答案对$10^9+7$取模。
输入样例
1
3
2 2 1
输出样例
3 3 2
Hint
首先1号点的度数不能超过2,2号点的度数不能超过2,3号点的度数不能超过1。  
对于大小为1的树,我们有3种方案,分别是1, 2, 3,即这个三个结点单独成为一棵树。  
对于大小为2的树,我们有3种方案,分别是1-2, 1-3, 2-3。  
对于大小为3的树,我们有2种方案,分别是1-2-3, 2-1-3。