题目描述
有一棵 n 层的满二叉树,第 i 层(0≤i≤n−1)有 2i 个结点。
第 i 层(1≤i≤n−1)的第 j 个结点(1≤j≤2i),是第 i−1 层第 ⌈2j⌉ 个结点的子结点。如 j 是奇数则是左子结点,否则是右子结点。
每个叶子结点都可以挂衣服。
对于每个非叶子结点,设它左子树和右子树上分别挂了 wl 和 wr 件衣服,要求挂完每件衣服后都有 wl−wr∈{0,1}(注意不能为 −1)。
请求出第 k 件衣服应该挂在第几个叶子结点,输出这个编号模 109+7 的值。
输入格式
一行,两个正整数 n,k。
输出格式
一行,一个正整数,表示所求叶子结点编号模 109+7 的值。
输入样例 #1
3 2
输出样例 #1
5
输入样例 #2
5 10
输出样例 #2
19
输入样例 #3
1 1
输出样例 #3
1
说明提示
【样例输入输出解释】
样例 1 解释
挂衣服的顺序是 1,5,3,7,2,6,4,8。
【数据规模与约定】
对于 100% 的数据,保证 1≤k≤min{2n,1018}。
| 子任务编号 |
数据范围 |
分值 |
| 1 |
1≤n≤10 |
20 |
| 2 |
1≤n≤20 |
| 3 |
1≤n≤106 |
60 |