在本题中,你需要找到 $n$ 阶蜿蜒曲线(meander)中字典序第 $k$ 小的一个。
考虑平面上的一条直线。$n$ 阶蜿蜒曲线是一条与该直线相交 $2n$ 次的闭合平面曲线。你可以将蜿蜒曲线想象成一条扭曲的道路环,通过桥梁穿过河流的直线段。上述直观定义需要通过一些形式化条件来完善:曲线不能有自交或自接触,曲线与直线相交的 $2n$ 个点必须互不相同且确实是相交而非相切,此外,曲线与直线除了上述交点外没有其他公共点。
让我们定义一种绘制蜿蜒曲线的便捷方法。不失一般性,将直线水平放置,并将交点按单位距离均匀排列。注意,这些交点将曲线分成了 $2n$ 个部分。其中 $n$ 个部分位于直线之上,另外 $n$ 个部分位于直线之下。我们将这些部分中的每一个绘制为以相应直线段为直径的半圆,并根据需要将其置于直线之上或之下。可以证明,这样得到的图形就是一条蜿蜒曲线:特别地,以这种方式构造的曲线没有自交或自接触。反之亦然:每一条蜿蜒曲线都可以通过连续(同胚)变换转化为这样的图形。
现在,让我们学习如何将蜿蜒曲线写成字符串。考虑按照上述过程绘制的蜿蜒曲线。让我们沿着直线从左向右走,并在每次遇到交点时进行记录。对于每个这样的点,都有两条曲线部分与之相连:一条在直线之上,一条在直线之下。每一部分都是从当前交点向左或向右延伸的半圆。我们将区分四种可能的情况,并用一个英文字母标记每种情况:
- 如果两个半圆都向右延伸,我们称曲线在该交点处“打开”(open),并用字母
O表示。 - 如果两个半圆都向左延伸,我们称曲线在该交点处“闭合”(close),并用字母
C表示。 - 如果下方的半圆向左延伸,上方的半圆向右延伸,我们称曲线在该交点处“向上”(up),并用字母
U表示。 - 如果上方的半圆向左延伸,下方的半圆向右延伸,我们称曲线在该交点处“向下”(down),并用字母
D表示。
从左到右移动,写下我们用来标记交点的 $2n$ 个字母。事实证明,这些信息足以唯一还原通过上述过程获得的蜿蜒曲线的图形。你可以将此过程想象为顺着河流(从左到右)漂流,并记录下桥梁附近道路的配置。
如果两个蜿蜒曲线的标记不同,则认为它们是不同的。作为示例,下面展示了所有 8 种不同的 3 阶蜿蜒曲线。
对于固定的阶数 $n$,取出该阶数下所有不同的蜿蜒曲线,然后按其标记的字典序进行排序。给定阶数 $n$ 和数字 $k$,求 $n$ 阶蜿蜒曲线中字典序第 $k$ 小的标记。
输入格式
输入的第一行包含两个整数 $n$ 和 $k$:蜿蜒曲线的阶数和序号($1 \le n \le 25$,$1 \le k \le 10^{11}$)。保证给定参数下的蜿蜒曲线存在。
输出格式
输出一个由 $2n$ 个字母组成的字符串:在 $n$ 阶蜿蜒曲线的字典序排序列表中,序号为 $k$ 的蜿蜒曲线的标记。
样例
输入 1
3 1
输出 1
ODOUCC
输入 2
3 2
输出 2
ODUDUC
输入 3
3 3
输出 3
ODUUDC
输入 4
3 4
输出 4
OODCUC
输入 5
3 5
输出 5
OOUCDC
输入 6
3 6
输出 6
OUDDUC
输入 7
3 7
输出 7
OUDUDC
输入 8
3 8
输出 8
OUODCC
说明
上述图片对应于样例。