经过一年的高强度编程工作,Byteasar 即将迎来期待已久的假期。在前往度假地的路上,他看到了许多路标,上面标有到拜特兰(Byteland)各个城镇的距离(单位:公里)。尽管路标上显示的距离是整数,但从路标到相应城镇的实际距离可能不是整数。因此,路标上的距离是向下取整后的结果(即不超过真实距离的最大整数)。
旅行结束后,Byteasar 意识到他看到的这些路标信息看起来很可疑。经过进一步思考,Byteasar 断定这些路标上的距离信息相互矛盾。他认为这是因为缺乏合格的施工人员,导致路政工作由随机雇佣的人员完成。Byteasar 想知道到底有多少个路标给出的距离是错误的。为此,他决定找到一个最大的路标集合,使得这些路标上的距离是相容的。这个问题对 Byteasar 来说太难了,所以他向你寻求帮助。幸运的是,Byteasar 记忆力极好,能够回忆起他看到的所有路标。然而,他在经过路标时并没有看里程表,因此他无法说出他看到这些路标的具体时间,甚至无法确定看到的顺序。
我们假设拜特兰是一条直线,城镇足够小,可以看作该直线上的点。我们还假设在旅途中,Byteasar 没有经过任何城镇。如果存在一种路标和所有城镇在直线上的放置方式,使得路标上显示的距离等于真实距离向下取整后的值,那么这组路标就是相容的。自然地,城镇和路标都不必位于整数坐标点上。没有两个城镇或两个路标可以位于同一点。Byteasar 发誓,至少有 20% 的路标是相容的。由于他很久以前曾担任过路政主管,特别是在他这次旅行所经过的这条路上,你可以将他的这一断言(源于他对合格路政工人比例的估计)视为对输入数据的保证。
输入格式
标准输入的第一行包含两个整数 $n$ 和 $m$ ($1 \le n \le 1000, 1 \le m \le 200$),由空格分隔,分别表示 Byteasar 看到的路标数量和拜特兰的城镇数量。接下来的 $n$ 行,每行描述一个路标;第 $i$ 行包含 $m$ 个整数 $d_{i,1}, d_{i,2}, \dots, d_{i,m}$ ($1 \le d_{i,j} \le 10^6$),由空格分隔,其中 $d_{i,j}$ 是第 $i$ 个路标上显示的到第 $j$ 号城镇的距离(单位:公里),即向下取整后的值。
在总分 60% 的测试点中,满足附加条件 $n \le 500, m \le 50$。其中 40% 的测试点满足 $n \le 100$,更小的一部分(占总分 20%)满足 $n \le 15$。
输出格式
第一行输出一个整数 $t$,表示相容路标的最大数量。第二行输出 $t$ 个整数,表示这些路标的编号。这些编号应按照 Byteasar 在路上可能看到它们的顺序排列。如果存在多种方案,程序可以任意输出其中一种。
样例
输入 1
3 2 2 2 2 3 3 2
输出 1
2 2 1
说明
如果第二个路标位于点 $x = 0$,第一个路标位于点 $x = \frac{1}{2}$,第一个城镇位于点 $x = 2\frac{1}{2}$,第二个城镇位于 $x = 3$,那么路标 1 和 2 上给出的距离就是到城镇的真实距离向下取整后的值。路标 1 和 3 也可以构成相容的放置方式。显然,第二个和第三个路标是矛盾的,因此不存在一种路标和城镇的放置方式,使得所有三个路标给出的都是正确的(向下取整后的)距离。
样例测试说明
- $n = 5, m = 1$:路标给出了到唯一城镇的不同向下取整距离;
- $n = 5, m = 2$:每两个路标之间都是矛盾的;任何单个路标都构成正确答案;
- $n = 200, m = 199$:所有路标的集合是相容的——例如,第 $i$ 个路标可以放置在 $\frac{i}{n}$ 处,第 $j$ 个城镇可以放置在 $10^6 + \frac{j}{n}$ 处。