CF2038I Polyathlon
题目描述
伯兰(Berland)是今年国际大学生多项全能比赛的主办国!与双项全能是两个项目的比赛类似,多项全能是多个项目的比赛。今年有 $m$ 个项目。此外,还有 $n$ 名参赛者。项目编号从 $1$ 到 $m$ ,参赛者编号从 $1$ 到 $n$ 。
有些参赛者擅长多项运动。我们还知道,对于每一对参与者来说,至少存在一种运动,即其中一人擅长该运动,而另一人不擅长。
比赛项目的顺序在开幕式上决定。从历史上看,它是由万能的随机数生成器决定的。掷出一个从 $1$ 到 $m$ 的随机数 $x$ 。比赛从 $x$ 开始,然后是 $(x \bmod m + 1)$ ,接着是 $((x + 1) \bmod m + 1)$ ,以此类推。
每个项目的比赛规则如下。如果剩下的所有参赛者(所有尚未被淘汰的参赛者)都不擅长该项目,则所有人都进入下一个项目。否则,所有熟练的参赛者都进入下一个项目,所有不熟练的参赛者都被淘汰出局。一旦比赛只剩下一名参赛者,比赛即告结束,该参赛者即为获胜者。
作为比赛的组织者,您事先对比赛可能出现的结果很好奇。对于每个运动项目 $x$ ,如果比赛从运动项目 $x$ 开始,请打印获胜者的编号。
输入格式
第一行包含两个整数 $n$ 和 $m$ ( $2 \le n, m \le 10^6,n \le 2^m,nm \le 2 \times 10^6$ ),它们分别是参赛人数和运动项目数。
接下来 $n$ 行的每行中包含一个二进制字符串,该字符串正好由 $m$ 个字符 0 或 1 组成--即第 $i$ 个参赛者的技能组合。如果第 $j$ 个字符为1,则 $i$ 个参赛者熟练掌握了 $j$ 运动。如果为0,则第 $i$ 个参与者不擅长 $j$ 运动。
输入的附加限制:对于每一对参与者来说,至少存在一种运动,即其中一人擅长该运动,而另一人不擅长。换句话说,所有 $n$ 二进制字符串都是成对不同的。
输出格式
输出 $m$ 个整数。对于从 $1$ 到 $m$ 的每个 $x$ ,如果比赛从运动 $x$ 开始,则打印获胜者的编号。