#P2414. Phylogenetic Trees Inherited

    ID: 1414 传统题 1000ms 256MiB 尝试: 2 已通过: 1 难度: 10 上传者: 标签>Ulm Local 2000完全二叉树状态压缩位运算

Phylogenetic Trees Inherited

描述

除其他外,计算分子生物学涉及处理基因序列。考虑到两个序列的进化关系,如果它们没有太大差异,我们可以说它们是密切相关的。我们可以用一棵树来表示这种关系,将来自祖先的序列放在其后代的序列之上。这样的树称为系统发育树。

虽然系统发育学的一项任务是从给定的序列中推断出一棵树,但我们将稍微简化并提供一个树结构 - 这将是一个完整的二叉树。您将获得树的 n 片叶子。当然你知道,n 总是 2 的幂。每片叶子都是一个氨基酸序列(由图中所示的单字符代码指定)。所有序列的长度均为相等 l。您的任务是以最低的成本推导出共同祖先的序列。

氨基酸丙氨酸AlaAArginineArgRAsparagineAsnNAspartic AcidAspDCysteineCysCGlutamineGlnQGlutamic AcidGluEGlycineGlyGHistidineHisHIsoleucineIleI

氨基酸亮氨酸LeuLLysineLysKMethionineMetMP

苯丙氨酸PheFProlineProPSerineSerSThreonineThrTTryptophanTrpWTyrosineTyrYValineValV

成本确定如下:树的每个内部节点都标有长度为 l 的序列,树的一条边的成本是边末端的两个序列不同的位置数,总成本是所有边的成本之和。然后在树的根处找到所有序列的共同祖先的序列。最佳公共上级是总成本最低的公共上级。

输入

输入文件包含多个测试用例。每个测试用例都以两个整数 n 和 l 开头,分别表示叶子处的序列数及其长度。Input 以 n=l=0 终止。否则,1<=n<=1024 和 1<=l<=1000。然后在氨基酸字母表上跟随长度为 l 的 n 个单词。它们从左到右表示完整二叉树的叶子。

输出

对于每个测试用例,输出一行,其中包含一些最佳公共上级和最小总成本。

输入数据 1

4 3
AAG
AAA
GGA
AGA

4 3
AAG
AGA
AAA
GGA

4 3
AAG
GGA
AAA
AGA

4 1
A
R
A
R

2 1
W
W

2 1
W
Y

1 1
Q

0 0

输出数据 1

AGA 3
AGA 4
AGA 4
R 2
W 0
Y 1
Q 0

来源

Ulm Local 2000