P12807 [AMPPZ 2019] Fantastic compression
题目背景
Source: [AMPPZ 2019](https://amppz.tcs.uj.edu.pl/2019/data.html).
题目描述
Franek 有一项任务:记住序列 $(1, 2, \ldots, n)$ 的一个排列 $P$。然而,这对他来说太无聊了。于是,他发明了一种全新的、奇妙的方式来压缩这些数字:他选取了一个较小的整数 $k$,并只记住了 $P$ 中所有连续的 $k$ 长度片段的和。换句话说,Franek 现在有一个序列 $S = (S_1, S_2, \ldots, S_{n-k+1})$,其中:
- $S_1 = P_1 + P_2 + \ldots + P_k$,
- $S_2 = P_2 + P_3 + \ldots + P_{k+1}$,
- $\ldots$
- $S_{n-k+1} = P_{n-k+1} + P_{n-k+2} + \ldots + P_n$。
然而,这种方法很快被证明并不那么奇妙。首先,Franek 惊恐地发现,有时会有多个排列压缩成相同的序列。此外,他现在甚至不确定自己是否正确地记住了压缩后的序列——初始排列可能已经永远丢失了!
给定一个压缩序列 $S$,帮助 Franek 找到所有与 $S$ 对应的排列 $P$。
输入格式
**本题单个测试点内有多组测试数据。**
第一行输入包含测试数据的数量 $z$($1 \le z \le 1000$)。接下来是每组测试数据,格式如下:
每组测试数据的第一行包含排列的长度 $n$ 和 Franek 选择的小整数 $k$($2 \le n \le 25000$;$2 \le k \le \min(n, 6)$)。第二行包含 $n - k + 1$ 个整数:压缩序列 $S$ 的元素($1 \le S_i \le 1\,000\,000$)。
所有测试数据中排列的总长度不超过 250, 000。
输出格式
对于每组测试数据,首先输出与给定序列 $S$ 对应的排列的数量 $c$。接下来的 $c$ 行,按字典序输出这些排列。每个排列应在一行内用 $n$ 个整数表示,用空格分隔。
假设在给定的测试数据中,$c$ 永远不会超过 1000。