아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

모두 가족이다

시간 제한1초메모리 제한1024 MB

요약
부모와 자녀 설명으로 가계도를 만든 뒤, 두 사람 사이의 관계를 정해진 친척 호칭 규칙과 올바른 서수 표기로 답하는 문제입니다.
난이도

보통10점 중 7점

유형
트리, DFS, 문자열, 구현
정답자
아직 제출이 없습니다

문제

가족 유전 연구소의 과학자들은 가계도를 따라 유전병이 퍼지는 과정을 추적하고 있다. 먼저 병에 걸린 가족 구성원과 각 자녀에게 병을 전달한 부모를 정리했다(각 자녀는 한쪽 부모에게서만 병을 물려받는다고 가정한다). 그런데 과학자들은 여러 친족 관계의 이름을 헷갈려 한다. 부모, 조부모, 형제자매는 익숙하다. 하지만 "삼종손, 이중 분리" 같은 관계는 좀처럼 머릿속에 그려지지 않는다. 여러 차례 논의 끝에 이들을 정리해 줄 정의를 떠올렸다.

AA와 BB라는 두 사람이 있고 두 사람의 가장 가까운 공통 조상이 CC라고 하자(그럴 확률이 얼마나 될까!). CC에서 AA로 이어지는 직계 자손이 mm명이면 AA는 CC로부터 mm대 분리되었다고 한다. 따라서 AA가 CC의 딸이면 11대 분리, CC의 손녀면 22대 분리, 이런 식이다. 자기 자신은 00대 분리이다.

이제 AA가 CC로부터 mm대 분리되고 BB가 CC로부터 nn대 분리되었다고 하자. 여기서 m≤nm \leq n이다. AA와 BB의 관계는 다음 규칙으로 정할 수 있다.

  1. m=0m = 0이면 BB는 n=1n=1일 때 AA의 자녀, n>1n > 1일 때 AA의 \mboxgreatn−2\mbox{great}^{n-2} 손주이다.
  2. 0<m=n0 < m = n이면 AA와 BB는 n=1n=1일 때 형제자매, n>1n > 1일 때 (n−1)(n-1)촌이다.
  3. 0<m<n0 < m < n이면 AA와 BB는 (m−1)(m-1)촌이고 (n−m)(n-m)대 분리되었다.

m=1m = 1이고 n=2n = 2이면 흥미로운 이름인 "00촌, 11대 분리"가 나오는데, 우리가 보통 "이모/삼촌" 또는 "조카"라고 부르는 관계이다.

아래 그림 1은 DD와 EE라는 두 사람에 대한 예를 보여 준다.

공통 조상으로부터 분리된 대수관계
DDEE
0011EE는 DD의 자녀이다
4400DD는 EE의 증증손주이다
3333DD와 EE는 22촌이다
9988DD와 EE는 77촌, 11대 분리이다
1144DD와 EE는 00촌, 33대 분리이다

그림 1: 관계의 예

과학자들은 가계도와 가계도에 있는 두 사람의 쌍을 제시하고, 각 쌍의 관계를 판별해 달라고 요청한다.

입력

입력의 첫 줄에는 가계도 설명의 개수와 질의 쌍의 개수를 나타내는 두 양의 정수 tt pp(t≤100,p≤1 000t \leq 100, p \leq 1\,000)가 주어진다. 이어서 tt개의 줄에 각각 하나의 가계도 설명이 주어진다. 각 가계도 설명은 s0s_0 dd s1s_1 s2…sds_2 \ldots s_d 형태로, s0s_0이라는 사람에게 s1s_1부터 sds_d까지 dd명의 자녀가 있음을 나타낸다. 모든 이름은 서로 다르며 알파벳 문자만 포함한다. 가계도 설명은 임의의 순서로 주어질 수 있다(즉, 전체 트리의 루트가 반드시 첫 번째 가계도 설명에 있지는 않다). 어떤 이름도 가계도 설명에서 s0s_0으로 두 번 이상 나타나지 않는다. 모든 가계도 설명을 합치면 정확히 하나의 트리가 되며, 트리의 노드 수는 22 이상 100100 이하이다.

이어서 pp개의 줄에 sis_i sjs_j 형태로 주어지며, si≠sjs_i \neq s_j이고 두 이름은 모두 트리에 있음이 보장된다.

출력

각 사람 쌍의 관계를 그림 1에 나온 형식으로 한 줄에 하나씩 출력한다. sjs_j가 sis_i의 직계 자손인 경우(그림 1의 첫 번째 예)를 제외하면 항상 각 쌍에서 sis_i의 이름을 먼저 출력한다. nn번째 서수는 $n$th로 출력하되 n=1,2,3,21,22,23,31,32,33,…n=1,2,3,21,22,23,31,32,33,\ldots인 경우에는 1st, 2nd, 3rd, 21st, 22nd, 23rd, 31st, 32nd, 33rd 등을 출력한다. 또한 분리된 대수에는 하나일 때 time을 쓰고 그 외에는 모두 times를 쓴다.

예제2

  1. 예제 1

    입력
    4 5
    Horatio 1 Irene
    Chris 2 Gina Horatio
    Alice 3 Dan Emily Frank
    Bob 2 Alice Chris
    Irene Bob
    Dan Frank
    Chris Emily
    Alice Chris
    Dan Irene
    
    예상 출력
    Irene is the great grandchild of Bob
    Dan and Frank are siblings
    Chris and Emily are 0th cousins, 1 time removed
    Alice and Chris are siblings
    Dan and Irene are 1st cousins, 1 time removed
    
  2. 예제 2

    입력
    4 6
    A 4 B C D E
    H 3 I J K
    C 2 F G
    D 1 H
    G C
    H A
    F G
    F H
    F K
    B K
    
    예상 출력
    G is the child of C
    H is the grandchild of A
    F and G are siblings
    F and H are 1st cousins
    F and K are 1st cousins, 1 time removed
    B and K are 0th cousins, 2 times removed