AT_abc382_d [ABC382D] Keep Distance
Description
[problemUrl]: https://atcoder.jp/contests/abc382/tasks/abc382_d
整数 $ N $ と $ M $ が与えられます。
以下の条件をすべて満たす長さ $ N $ の整数列 $ (A_1,\ A_2,\ \ldots,\ A_N) $ を辞書順にすべて出力してください。
- $ 1\ \leq\ A_i $
- $ 2 $ 以上 $ N $ 以下の各整数 $ i $ に対して $ A_{i\ -\ 1}\ +\ 10\ \leq\ A_i $
- $ A_N\ \leq\ M $
数列の辞書順とは長さ $ N $ の数列 $ S\ =\ (S_1,\ S_2,\ \ldots,\ S_N) $ が長さ $ N $ の数列 $ T\ =\ (T_1,\ T_2,\ \ldots,\ T_N) $ より**辞書順で小さい**とは、ある整数 $ 1\ \leq\ i\ \leq\ N $ が存在して下記の $ 2 $ つがともに成り立つことをいいます。
- $ (S_1,\ S_2,\ \ldots,\ S_{i-1})\ =\ (T_1,\ T_2,\ \ldots,\ T_{i-1}) $
- $ S_i $ が $ T_i $ より(数として)小さい。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ M $
Output Format
条件を満たす長さ $ N $ の整数列の個数を $ X $ として $ X\ +\ 1 $ 行出力せよ。
$ 1 $ 行目には $ X $ の値を出力せよ。
$ i\ +\ 1 $ ($ 1\ \leq\ i\ \leq\ X $) 行目には条件を満たす整数列のうち辞書順で $ i $ 番目に小さいものを空白区切りで出力せよ。
Explanation/Hint
### 制約
- $ 2\ \leq\ N\ \leq\ 12 $
- $ 10N\ -\ 9\ \leq\ M\ \leq\ 10N $
- 入力される値はすべて整数
### Sample Explanation 1
$ (1,\ 11,\ 21),\ (1,\ 11,\ 22),\ (1,\ 11,\ 23),\ (1,\ 12,\ 22),\ (1,\ 12,\ 23),\ (1,\ 13,\ 23),\ (2,\ 12,\ 22),\ (2,\ 12,\ 23),\ (2,\ 13,\ 23),\ (3,\ 13,\ 23) $ の $ 10 $ 個の数列が条件を満たします。