#1720. wjx 的二叉排序树
wjx 的二叉排序树
说明
wjx 最近学习了二叉排序树:对于树上的任意一个点,如果其存在左子树,则其左子树中所有点的数字都必须小于等于该点的数字;如果其存在右子树,则其右子树中所有点的数字都必须大于等于该点的数字。
现在 wjx 拿到了 $n$ 个正整数,他想用这些数字建立一棵二叉排序树,但是他给自己定了一个有趣的规则
他希望这棵树中任意一条简单路径(至少包含 $2$ 个节点)上的任意相邻两个数字的乘积,在二进制下 $1$ 的个数为奇数个
现在他想知道有多少种方案可以构造这样的一棵二叉排序树?
这里我们认为两个数即使下标不同,只要它们的值相同,则计算方案数时就认为它们相同。
例如:$n=2,a_1=1,a_2=1$,则方案数为 $2$。
输入格式
第一行一个正整数 $T$,表示测试数据的组数。
每组数据中,第一行一个正整数 $n$,第二行 $n$ 个正整数 $a_i$。
对于 $20\%$ 的数据,$n\le 10$。
对于 $40\%$ 的数据,$n\le 20$。
对于 $60\%$ 的数据,$n\le 50$。
对于 $100\%$ 的数据,$T\le 10$,$1\le n\le 200$,$1\le a_i\le 10^9$。
输出格式
$T$ 行,表示对应的方案数模 $10^9+7$。
样例
2
3
1 2 3
3
7 2 1
0
5