#P2945. Find the Clones

Find the Clones

描述

得克萨斯州的一个小镇——双镇(Doubleville)遭到了外星人的袭击。外星人绑架了一些居民,并把他们带到了环绕地球运行的一艘宇宙飞船上。在进行了一些(相当令人不快的)人体实验后,外星人克隆了这些受害者,然后把他们的多个克隆体放回了双镇。所以现在可能会出现有 6 个一模一样的叫休·F·邦布尔比(Hugh F. Bumblebee)的人:一个是原本的人,另外 5 个是他的克隆体。联邦未经授权克隆事务局(FBUC)交给你一项任务,即确定每个人有多少个克隆体。为了帮助你完成这项任务,FBUC 已经从每个人身上采集了一份 DNA 样本。同一个人的所有克隆体都有相同的 DNA 序列,而不同的人有不同的序列(我们知道这个镇上没有同卵双胞胎,这不是问题)。

输入

输入包含几个测试用例块。每个用例以包含两个整数的一行开始:人数 1n200001 \leq n \leq 20000 以及 DNA 序列的长度 1m201 \leq m \leq 20。接下来的 nn 行包含 DNA 序列:每行包含一个由 mm 个字符组成的序列,其中每个字符是 ACGT 中的一个。 当输入出现 n=m=0n = m = 0 的块时,表示输入结束。

9 6
AAAAAA
ACACAC
GTTTTG
ACACAC
GTTTTG
ACACAC
ACACAC
TCCCCC
TCCCCC
0 0

输出

对于每个测试用例,你必须输出 nn 行,每行包含一个整数。第一行包含没有被克隆的不同人的数量。第二行包含只被克隆了一次的人的数量(即对于每个这样的人,有两个一模一样的克隆体)。第三行包含有三个一模一样克隆体的人的数量,以此类推:第 ii 行包含有 ii 个一模一样克隆体的人的数量。例如,如果有 11 个样本,其中一个来自约翰·史密斯(John Smith),而其他所有样本都来自乔·富巴(Joe Foobar)的克隆体,那么你必须在第一行和第十行打印 1,在所有其他行打印 0

1
2
0
1
0
0
0
0
0

提示

输入文件很大,建议使用 scanf 以避免超时(TLE)。

来源

2005 年中欧竞赛