胖头鱼头胖
题号:NC245538
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

Z特别喜欢吃胖头鱼!所以他经常在家附近的鱼市买鱼,碰巧这个鱼市里面卖的都是胖头鱼。鱼市里有 n 家店铺,编号为,第 i 家店铺的鱼的库存量为 a_i ,即在第 i 家店铺中小Z可以选择购买 条鱼(买0条即是不买)
定义小Z的快乐值为在所有店铺买的鱼的数量的异或和,也就是说如果小Z在第 i 个店铺购买了 b_i 条鱼, 那么他的快乐值就等于  ,即,其中表示按位异或运算。
有一天,他去鱼市时突然想到了一个问题:如果只在编号为的这一段店铺区间中买鱼,有多少购买方法使得自己的快乐值为 s ?这个问题很难回答…… 因为小Z数学不好。于是,他只好求助聪明的你,来解决这个问题,由于这个答案可能很大,故输出时对 取模。

输入描述:

第一行两个正整数 ,表示分别店铺个数以及询问次数。
第二行 n 个正整数 ,第i个整数表示第 i 家店铺中的鱼的库存量。

后面 q 行,每行三个整数 , 分别代表询问的一段店铺区间以及快乐值。

输出描述:

输出 q 行,每行一个整数,依次表示询问对应的答案,答案对  取模。
示例1

输入

复制
6 6
1 1 4 5 1 4
1 1 0
1 2 0
1 3 0
1 4 0
1 5 0
1 6 0

输出

复制
1
2
4
20
40
168