Luke 刚刚发现了一款新的 5D 卡丁车电子游戏。然而,这款软件并不是免费的:为了激活它,你需要提供一个许可证密钥(license key)。
Luke 发现,为了使许可证密钥有效,它必须是一个长度为 $n$ 的排列,且同时满足以下两个性质:
- 它是双调的(bitonic);
- 它包含 $m$ 个环(cycles)。
设 $k$ 表示许可证密钥的数量(即满足上述条件的排列数量)。Luke 是一个无私的黑客,所以他想为他的 2000 个朋友每人提供一个互不相同的许可证密钥。然而,$k$ 可能会小于 2000。
请通过输出 $r = \min(k, 2000)$ 个互不相同的有效许可证密钥来帮助 Luke。
一个长度为 $n$ 的排列是一个由 $1$ 到 $n$ 的 $n$ 个互不相同的整数以任意顺序组成的数组。例如,$[2, 3, 1, 5, 4]$ 是一个排列,但 $[1, 2, 2]$ 不是一个排列($2$ 在数组中出现了两次),$[1, 3, 4]$ 也不是一个排列($n = 3$ 但数组中出现了 $4$)。
如果存在一个下标 $i$($1 \le i \le n$)满足以下条件,则排列 $p_1, p_2, \dots, p_n$ 是双调的:
- 对于 $2 \le j \le i$,有 $p_{j-1} \le p_j$;
- 对于 $i \le j \le n - 1$,有 $p_j \ge p_{j+1}$。
一个环是满足以下条件的子集 $C \subseteq \{1, 2, \dots, n\}$:
- $C$ 非空;
- 如果 $x \in C$,则 $p_x \in C$;
- $C$ 是极小的,即不存在一个环 $C'$ 满足 $C' \subsetneq C$。
输入格式
输入仅包含一行,其中有两个整数 $n, m$($1 \le m \le n \le 100$),分别表示排列的长度和目标环的数量。
输出格式
第一行输出一个整数 $r$,表示你将要输出的排列数量。注意,$r$ 必须为题面中所定义的 $\min(k, 2000)$。
接下来输出 $r$ 行。每行必须包含一个长度为 $n$ 且有 $m$ 个环的双调排列。这些排列必须互不相同。
样例
输入样例 1
6 3
输出样例 1
9 1 4 5 6 3 2 6 5 4 3 2 1 1 2 4 5 6 3 1 2 5 6 4 3 1 3 4 6 5 2 1 5 6 4 3 2 3 5 6 4 2 1 1 3 6 5 4 2 2 6 5 4 3 1
说明
样例 1 说明:在样例中,共有 9 个有效的许可证密钥(即长度为 6 且有 3 个环的双调排列)。例如,$[3, 5, 6, 4, 2, 1]$ 是双调的(在上述定义中,$i = 3$),且它有 3 个环:$\{1, 3, 6\}$,$\{2, 5\}$,$\{4\}$。因此你需要输出 $r = \min(9, 2000) = 9$ 个这样的排列。