U379725 赛博算命
题目描述
(以下为真实故事,有的人已经因此多了个外号叫张大师了)
烨师傅是个武德充沛的acmer,她即将代表学校参加武术大赛。
烨师傅和她的队友们已经到达了赛场,正在摩拳擦掌准备上场~~打架~~交流武术了,但上场之前还需要进行抽签。
比赛为淘汰制,且每一场比赛不存在平局的情况。
现在,抽签结果已经出了,但是并没有给出完整的赛程表,烨师傅急于知道自己和队友第一场的对手(或者轮空),于是她根据给出的赛程表推断出了以下结论:
假设第一轮比赛共有 $ k \geq 2 $名选手。
1、如果存在整数$n$使得$k =2^n$,那么编号为$1$的选手对战编号为$2^n$的选手,那么编号为$2$的选手对战编号为$2^n-1$的选手,以此类推,没有选手轮空,这一场比赛结束后,只剩下$2^{n-1}$个选手。
2、如果存在整数$n$使得$2^{n-1} < k < 2^n$,在保证第一轮结束后还剩下$2^{n-1}$个选手的前提下,编号为$1$的选手对战编号为$k$的选手,编号为$2$的选手对战编号为$k-1$的选手,以此类推,剩下一些编号中间的选手轮空。
烨师傅已经知晓自己和队友们的编号,现在,她想让你求,对手的编号的乘积。
如果轮空,则认为对手的编号为$k+1$号。
结果对$10^9+7$取模。
输入格式
输入数据共包含$2$行
第一行一个正整数$q$和一个整数$k$,表示烨师傅有$q$名队友,一共有$k$名选手参加第一轮比赛,其中$1\leq q \leq 10^6$,$2 \leq k\leq 10^9$,且$q\leq k$
第二行$q$个整数,第$i$个整数代表队友编号为$n_i$,保证$n_i$不重复,其中$1\leq n_i \leq k$
输出格式
$1$行,一个整数,表示对手编号的乘积。