아담의 유전자

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

인간 복제 분야의 세계 선두 기업인 제미니 연구소(Gemini Labs)가 의사결정 지원 소프트웨어를 개발하기 위해 여러분을 고용했습니다. 제미니에서 모든 복제 인간은 유전적으로 완벽한 인간인 아담(ADAM) 으로부터 만들어집니다. 아담의 DNA는 일반적인 사람보다 훨씬 복제하기 쉽다는 특징이 있습니다.

다만 아담의 복제 인간이 모두 똑같지는 않습니다. 유전학자들은 유전을 연구하기 위해 열성 유전자 형태의 돌연변이를 도입합니다. 예를 들어 밥(Bob)은 대머리 열성 유전자가 추가된 아담의 복제 인간일 수 있고, 과학자들은 밥을 관찰하여 그 유전자가 미치는 미묘한 영향을 연구합니다. 밥의 복제 인간은 이 열성 유전자를 물려받으며, 그 복제 인간의 복제 인간도 마찬가지입니다. 밥의 후손 중 어느 누구도 대머리 열성 유전자를 두 번째로 받지 않는 한 문제가 없습니다. 만약 그런 일이 생기면 대머리 복제 인간이 태어나고, 복제 관리 위원회가 제미니를 폐쇄할 것입니다.

여러분이 작성할 소프트웨어는 연구진의 복제 요청을 받아 일관성(consistency)안전성(safety) 을 평가합니다.

  • 아담의 후손이 아닌 복제 인간이 하나라도 포함되어 있으면, 그 요청 모음은 일관성이 없다(inconsistent) 고 합니다.
  • 동일한 열성 유전자를 두 개 가진 복제 인간이 만들어지면, 그 요청 모음은 안전하지 않다(unsafe) 고 합니다.

입력

프로그램은 한 줄에 하나씩 주어지는 복제 요청 목록을 읽습니다. 요청의 형식(문법)은 다음과 같습니다.

<request>  = clone_<name>_from_<name><genelist>
<genelist> = NULL | _mutating_<gene><genes>
<genes>    = NULL | _<gene><genes>
<gene>     = 알파벳 대문자 3개
<name>     = 알파벳 대문자 1개 이상 10개 이하
_          = 공백 한 칸

전형적인 요청의 예는 clone BOB from ADAM mutating BLD HEM 입니다. 단어 사이에는 항상 공백이 정확히 한 칸 있으며, 각 줄의 마지막 글자 바로 뒤에 줄바꿈이 옵니다. 한 요청에는 돌연변이 0개부터 10개까지 올 수 있고, 돌연변이 없으면 mutating 키워드가 나타나지 않습니다(예: clone BOB from ADAM).

입력은 위 문법을 반드시 따르며, 한 복제 인간당 요청이 최대 한 번만 등장합니다(같은 clone <name> 으로 시작하는 줄은 최대 한 개). 또한 한 요청 안에서 같은 유전자가 두 번 나열되는 일은 없습니다.

각 요청은 그 요청보다 앞서 나온 정의만 유효한 것으로 보고 처리합니다. 부모가 ADAM 인 요청은 항상 아담과 연결되어 있습니다. 부모가 다른 복제 인간인 요청은, 그 부모가 앞선 줄에서 이미 정의되었고 동시에 그 부모 자신이 '일관성 있고 안전함'으로 판정된 경우에만 아담과 연결됩니다. 그렇지 않으면 그 요청은 아담과 연결되지 않습니다. 따라서 어떤 복제 인간이 '일관성 있고 안전함'에 실패하면, 그 복제 인간으로부터 만들어지는 이후의 모든 복제 인간도 아담과 연결되지 않습니다. 한 복제 인간이 가진 열성 유전자는 아담에서 그 복제 인간까지 이어지는 사슬을 따라 누적된 모든 돌연변이입니다.

출력

프로그램은 처리한 요청을 읽은 순서 그대로 한 줄에 하나씩 출력합니다. 각 요청은 다음 규칙에 따라 다시 씁니다.

  1. 복제 인간이 일관성 있고 안전하면 clone <name> from <name> is consistent and safe 를 출력합니다.
  2. 복제 인간이 일관성이 없으면 clone <name> from <name> has no connection to ADAM 를 출력합니다.
  3. 복제 인간이 안전하지 않으면 clone <name> from <name> was at least twice mutated with <gene> 를 출력합니다. 여기서 <gene> 는 이번 요청의 돌연변이 목록에서, 아담으로부터 이미 물려받은 열성 유전자에 처음으로 다시 등장하는 유전자입니다. 이렇게 두 번째로 중복되는 첫 번째 유전자 하나만 출력합니다.

요청이 일관성이 없으면 안전한지 여부는 보고하지 않습니다. 단어 사이에는 공백을 정확히 한 칸만 두고, 줄의 앞뒤에 공백을 두지 않습니다.