#P1910. Adam's Genes

Adam's Genes

描述

你受双子星实验室(Gemini Labs)雇佣,该实验室是人类克隆领域的全球领先机构,任务是编写决策支持软件。在双子星实验室,所有克隆体都源自 “亚当(ADAM)”,他是一个基因完美的人类。他的 DNA 中的某些特质使得他比普通人类更容易被克隆。不过,并非所有亚当的克隆体都完全相同,因为遗传学家会以隐性基因的形式引入突变,以便对遗传学有更多了解。例如,鲍勃(Bob)可能是亚当的一个克隆体,添加了导致秃顶的隐性基因。科学家会研究鲍勃,以了解该基因可能产生的微妙影响。鲍勃的克隆体将携带该隐性基因,这些克隆体的克隆体也会携带,依此类推。只要从鲍勃衍生出的克隆体没有获得第二个秃顶隐性基因,一切就都正常。如果发生这种情况,就会产生一个秃顶克隆体,克隆委员会(Cloning Board)会关闭双子星实验室。

你要编写的软件接收来自研究人员的克隆请求,并对其一致性和安全性进行评估。如果一个克隆请求集合中包含不是源自亚当的克隆体,那么这个集合就是 “不一致的”。如果一个克隆请求集合产生了具有两个相同隐性基因的克隆体,那么这个集合就是 “不安全的”。

输入

你的程序读取一个包含克隆请求的文件,每行一个克隆请求。以下是克隆请求的格式:

<请求> = clone_<名字>from<名字><基因列表>

<基因列表> = NULL | mutating<基因><其他基因>

<其他基因> = NULL | _<基因><其他基因>

<基因> = 由三个大写字母组成

<名字> = 由 1 到 10 个大写字母组成

_ = 一个空格

一个典型的克隆请求是:

clone BOB from ADAM mutating BLD HEM

注意:单词之间总是恰好有一个空格;一行的最后一个字符紧接着是换行符(EOLN)。一个请求中可能有 0 到 10 个突变。如果请求中没有突变,关键字 “mutating” 就不会出现,例如:

clone BOB from ADAM

输入保证符合语法格式规范,并且保证每个克隆体最多只有一个克隆请求,也就是说,“clone BOB” 作为输入行的开头最多出现一次。此外,你在处理请求时,应假设只有在该请求之前的定义才有效。因此,如果有以下输入片段:

clone BOB from ADAM

clone MIKE from TIM

clone TIM from BOB

你的输出应该包含:

clone MIKE from TIM has no connection to ADAM

因为在克隆迈克(MIKE)时,它与亚当(ADAM)没有关联。如果一个克隆体既不一致又不安全,那么从该克隆体衍生出的所有后续克隆体都应报告为与亚当没有关联。例如,如果有以下输入片段:

clone BOB from ADAM mutating BLD

clone CHARLIE from BOB mutating BLD

clone DAVID from CHARLIE

你的输出应该包含:

clone BOB from ADAM is consistent and safe

clone CHARLIE from BOB was at least twice mutated with BLD

clone DAVID from CHARLIE has no connection to ADAM

还需保证在同一个请求中不会列出重复的基因。

输出

你的程序生成一个经过处理的请求文件,每行一个请求,顺序与读取时一致。

根据以下规则修改请求:

  1. 如果一个克隆体既一致又安全,该行应采用以下格式:clone JOE from ADAM is consistent and safe

  2. 如果一个克隆体不一致,该行应按如下方式表明:clone <名字> from <名字> has no connection to ADAM

  3. 如果一个克隆体不安全,该行应按如下方式表明:clone <名字> from <名字> was at least twice mutated with <基因>,其中 <基因> 是克隆体突变列表中首次出现的、与亚当的突变重复的基因。你应该只打印出第一个这样的双重突变基因。

如果某个克隆请求不一致,就无需报告它是否安全。你的输出中单词之间应恰好有一个空格,并且没有前导或尾随空格。

输入数据

clone JOE from ADAM
clone BOB from ADAM mutating HEM
clone SAM from BOB mutating BLD
clone ED from SAM mutating BLD
clone FRANK from ED mutating HEM
clone KAIN from ABEL
clone ABEL from KAIN

输出数据

clone JOE from ADAM is consistent and safe
clone BOB from ADAM is consistent and safe
clone SAM from BOB is consistent and safe
clone ED from SAM was at least twice mutated with BLD
clone FRANK from ED has no connection to ADAM
clone KAIN from ABEL has no connection to ADAM
clone ABEL from KAIN has no connection to ADAM
···