题目描述
注意:本题的内存限制为 512MB,通常限制的 2 倍。
Farmer John 的 N(1≤N≤5⋅105)头奶牛都被分配了一个长度为 K 的非全零位串(1≤K≤20)。不同的奶牛可能被分配到相同的位串。
两个位串的 Jaccard 相似度定义为它们的按位与的结果中 1 的数量除以它们的按位或的结果中 1 的数量。例如,位串 11001 和 11010 的 Jaccard 相似度为 2/4。
对于每头奶牛,输出她的位串与每头奶牛(包括她自己)的位串的 Jaccard 相似度之和,对 109+7 取模。具体地说,如果总和等于一个有理数 a/b,其中 a 和 b 是互质的整数,则输出范围 [0,109+7) 内的唯一整数 x,使得 bx−a 被 109+7 整除。
输入格式
输入的第一行包含 N 和 K。
以下 N 行每行包含一个整数 i∈(0,2K),表示一头奶牛分配到了 i 的 K 位二进制表示。
输出格式
对于每头奶牛输出一行,包含所求的总和,对 109+7 取模。
提示
奶牛们分配到了以下的位串:[01,01,10,11]。
对于第一头奶牛,总和为 sim(1,1)+sim(1,1)+sim(1,2)+sim(1,3)=1+1+0+1/2≡500000006(mod109+7)。
第二头奶牛的位串与第一头奶牛相同,所以她的总和也与第一头奶牛相同。
对于第三头奶牛,总和为 sim(2,1)+sim(2,1)+sim(2,2)+sim(2,3)=0+0+1+1/2≡500000005(mod109+7)。
- 测试点 2∼15:对于每一个 K∈{10,15,16,17,18,19,20} 有两个测试点。