2024 上海市大学生编程新锐挑战赛

F. sha7dow loves data structure
PDF 题面可用
你可以在这里下载。

单点时限: 1.0 sec

内存限制: 128 MB

$\texttt{sha7dow}$ 很喜欢数据结构,特别是各种奇奇怪怪的树。$\texttt{sha7dow}$ 刚刚得到了一个完美的顺序存储二叉堆,这是一个 $n+1$ 层的满二叉树,他希望你能帮助他用这个完美的二叉堆 $H$ 生成另一个树 $T$。

  • $\texttt{sha7dow}$ 首先为 $H$ 中每两个相邻的叶子 $x$ 和 $x+1$ 连边($2^n \leqslant x < 2^{n+1} -1$)。
  • 你需要决定 $T$ 的节点数 $m$,并为 $H$ 中的每个节点选择 $T$ 中的一个节点连边。
  • 对于 $T$ 中的每一对节点 $u,v$,若 $H$ 中存在一对节点 $x,y$,有形如 $u-x-y-v$ 的一条链存在,则连边 $u,v$。
  • $\texttt{sha7dow}$ 最后删去所有和 $H$ 中的节点相连的除原有满二叉树上外的边。

$\texttt{sha7dow}$ 不希望这个生成过程中的图过于复杂,所以你需要保证整个过程中与 $H$ 和 $T$ 中的每个节点相连的边都不应超过 $k$ 条。

输入格式

输入一行两个整数 $n,k$,分别表示 $H$ 的层数和每个节点连边的限制。

输出格式

第一行包含一个整数 $m$,表示 $T$ 的节点数。
第二行包含 $2^{n+1} - 1$ 个整数 $t_i$,表示对于 $H$ 中的每个节点 $i$ ,被选择连边的 $T$ 中的节点。

样例

Input
2 2000
Output
2
2 1 1 2 1 1 2

提示

$1 \leqslant n \leqslant 20 \leqslant k \leqslant 10^6$
$1 \leqslant t_i \leqslant m < 2^{n+1}$
堆通常是一个可以被看做一棵完全二叉树的数组对象,被称为顺序存储,其中 $x$ 和 $2x$ 连边,$x$ 和 $2x+1$ 连边($x$ 为所有非叶子节点,特别地,如果是一个 $n+1$ 层的满二叉树,则 $1 \leqslant x < 2^n$)。