#p681. 习题8.5.4 小球

习题8.5.4 小球

在一个遥远的星球上,有一个神奇的森林,这个森林里的树木都是以满二叉树的形式生长的。森林里住着一群小精灵,它们喜欢在树上玩耍。每个精灵都有一个独特的规则:它们总是从树的根节点开始,沿着树枝向上爬,每次遇到一个节点,如果该节点的布尔值是false,它们就会将其变为true并继续向左子树爬;如果节点的布尔值是true,它们就会将其变为false并向右子树爬。直到精灵到达某个叶子节点,它才会停下来休息。

由于精灵们总是遵循这个规则,所以每棵树的节点布尔值会随着时间的推移而改变,这也影响着后续精灵的爬树路径。

有一天,森林里的大长老想要举办一场爬树比赛,他想要预测第I个精灵将会停在哪个叶子节点上。为了简化问题,长老决定将森林中每棵树的初始状态都设置为所有节点的布尔值都是false。

因为所有的节点最初为false,所以第一个精灵将会访问节点1,节点2和节点4,转变节点的布尔值后在在节点8停止。第二个精灵将会访问节点1、3、6,在节点12停止。明显地,第三个精灵在它停止之前,会访问节点1、2、5,在节点10停止。

现在,长老需要你的帮助,他想要你编写一个程序,给定树的深度D和精灵的序号I,计算出第I个精灵将会停在哪个叶子节点上。这样他就能为比赛布置好终点旗帜,等着看精灵们欢乐地在树上攀爬了。

【输入】

一行包含两个整数D和I,用空格隔开。其中2≤D≤20,1≤I≤524288。

【输出】

输出第I个精灵下落停止时的叶子节点序号。

【输入样例】

4 2

【输出样例】

8