序列的与和
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

WY是一个序列大师,他喜欢研究一些和序列相关的操作。时间长了,WY对某一些特定的序列产生了感情,换句话说,WY喜欢和这些特定的序列打交道。比如说WY最近就迷上了这样一类序列:

  • 我们规定序列的与和定义为序列中所有元素按位与得到的结果。

    • 如序列 [1,2,3] :其与和结果为1&2&3=0.

  • 若一个序列与和的结果,其二进制表示形式下包含 k 个 1 ,WY则会认为这是他喜欢的序列

现在WY的手里有一个序列了,他想知道,这个的序列的非空子序列中有多少个他喜欢的序列。由于WY已经非常熟悉这类序列了,所以他想考考你,看看你是否能解决这个问题。

子序列定义为:从原序列中去除几个(可以为零个)元素后得到的序列。



输入描述:

  • 第一行两个正整数, nk

     分别表示序列元素个数 n ,以及WY喜欢的序列类型的与和,在其二进制形式下包含 1 的个数 k。    

  • 第二行 n个 数,表示给定的序列元素
数据范围:

输出描述:

对于每个测试样例输出一个数字,表示你统计的满足要求的子序列的个数。
示例1

输入

复制
3 6
2 4 1

输出

复制
0

说明

  • 对于样例,其子序列有:

    • [2]:其与和为10(二进制),仅包含一个1,不为6,所以对答案贡献为零

    • [2,4]:与和为 0 ,同理,贡献为零。

    • [2,1]:与和结果0

    • [2,4,1]:与和结果0

    • [4]:与和结果100

    • [4,1]:与和结果0

    • [1]:与和结果1

            综上,答案为0


备注: