题目描述
数学和计算机科学中的一些概念在一维或二维时很简单,但在推广到任意维度时会变得复杂。例如,求解多维微分方程和分析 维超立方体的拓扑结构。前者比其一维情形复杂得多,而后者则与其“低维亲戚”具有显著的相似性。
考虑一个由各维度给定的 维“盒子”。在二维中,盒子 表示一个长为 单位、宽为 单位的盒子。在三维中,盒子 可以表示一个 的盒子(长、宽、高)。在六维中,盒子 的含义可能不太明确,但我们可以分析盒子的某些性质,例如其维度之和。
在本问题中,你需要分析一组 维盒子的一个性质:确定最长的嵌套盒子串。即一个盒子序列 ,其中每个盒子 可以嵌套在盒子 中()。
盒子 可以嵌套在盒子 中,如果存在 的某种重新排列,使得重新排列后的每个维度都小于 中对应的维度。这类似于将盒子 旋转以查看是否能放入盒子 中。但由于允许任意重新排列,盒子 可以被扭曲而不仅仅是旋转(参见以下示例)。
例如,盒子 可以嵌套在盒子 中,因为 可以重新排列为 ,使得每个维度都小于 中的对应维度。盒子 不能嵌套在盒子 中,因为无论如何重新排列 ,都无法满足嵌套条件;但盒子 可以嵌套在 中,因为 可以重新排列为 ,从而嵌套在 中。
正式定义嵌套如下:盒子 可以嵌套在盒子 中,如果存在 的一个排列 ,使得 “适配”于 ,即对于所有 ,满足 。
输入格式
输入由一系列盒子序列组成。每个盒子序列的第一行包含两个数字:序列中的盒子数量 和盒子的维度 (在同一行给出)。
接下来的 行,每行描述一个盒子,包含该盒子的 个测量值,这些值之间用一个或多个空格分隔。序列中的第 行()表示第 个盒子的测量值。
输入文件中可能包含多个盒子序列。你的程序需要处理所有序列,并针对每个序列确定哪些盒子可以构成最长的嵌套串,以及该嵌套串的长度(即串中盒子的数量)。
在本问题中,盒子的最大维度为 ,最小维度为 。每个序列中盒子的最大数量为 。
输出格式
对于输入文件中的每个盒子序列,首先在一行输出最长嵌套串的长度,然后在下一行按顺序输出组成该嵌套串的盒子编号。嵌套串中"最小"或"最内层"的盒子应排在第一位,后续盒子(如果存在)依次排列。
盒子的编号应按照它们在输入文件中出现的顺序确定(第一个盒子编号为 ,以此类推)。
如果存在多个相同长度的最长嵌套串,输出其中任意一个即可。
输入输出样例
5 2
3 7
8 10
5 2
9 11
21 18
8 6
5 2 20 1 30 10
23 15 7 9 11 3
40 50 34 24 14 4
9 10 11 12 13 14
31 4 18 8 27 17
44 32 13 19 41 19
1 2 3 4 5 6
80 37 47 18 21 9
5
3 1 2 4 5
4
7 2 5 6