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

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

당신은 나의 누구인가요

시간 제한2초메모리 제한256 MB

요약
가족 관계도를 읽고 두 사람을 입력으로 주면 한 사람이 다른 사람에게 어떤 친척인지 영어 호칭으로 출력합니다.
난이도

어려움10점 중 8점

유형
그래프, 트리, 구현, 해시맵
정답자
아직 제출이 없습니다

문제

클라라메이 이모는 친척의 가계도를 그리고 있다. 그런데 두 사람이 서로 어떤 사이인지 자꾸 헷갈린다. 가계도를 읽어서 두 사람 사이의 호칭을 붙이는 프로그램을 작성하라.

가계도는 항상 다음 규칙을 지킨다.

  • 두 번 결혼한 사람은 없다. 따라서 의붓 관계는 나타나지 않는다.
  • 가계도의 모든 자녀는 결혼한 부부의 자녀이고, 아버지는 남자이며 어머니는 여자이다.
  • 남매끼리 결혼한 경우와 어떤 종류든 사촌끼리 결혼한 경우는 없다.
  • 가계도의 모든 사람은 결혼과 부모 자식 관계로 서로 이어져 있다.

호칭은 다음 정의를 따른다. 호칭은 영어 단어이며 영어 그대로 출력한다.

  • father와 mother는 자녀의 부모이다.
  • brother와 sister는 부모가 같은 남자 형제와 여자 형제이다.
  • son과 daughter는 부모의 자녀이다.
  • uncle과 aunt는 자녀의 부모와 형제자매인 남자와 여자이다.
  • nephew와 niece는 형제자매의 남자 자녀와 여자 자녀이다.
  • grandfather와 grandmother는 자녀의 부모의 아버지와 어머니이다.
  • great grandfather와 great grandmother는 자녀의 조부모의 아버지와 어머니이다.
  • great uncle과 great aunt는 자녀의 조부모와 형제자매인 사람이다.
  • removed가 붙지 않은 사촌은 가계도에서 같은 세대에 있다. 1st cousins는 조부모가 같고, 2nd cousins는 증조부모가 같으며, 그다음도 같은 방식이다.
  • removed가 붙은 사촌은 세대가 다르다. 1st cousins 1-time removed는 어떤 사람과 그 사람의 첫째 사촌의 자녀 사이에 성립하고, 1st cousins 2-times removed는 어떤 사람과 그 사람의 첫째 사촌의 손주 사이에 성립하며, 그다음도 같은 방식이다.
  • 사촌 관계는 대칭이다. A가 B의 1st cousins 2-times removed이면 B도 A의 1st cousins 2-times removed이다.
  • 결혼 때문에 생기는 관계는 인척 관계이고 호칭 뒤에 -in-law가 붙는다. 배우자의 부모는 father-in-law 또는 mother-in-law, 배우자의 형제자매는 brother-in-law 또는 sister-in-law, 배우자의 사촌은 cousins-in-law이다.

그림 1은 첫 번째 예제의 가계도이다. 이 가계도에서 Claire와 Carol은 1st cousins이고, Claire와 Diva는 1st cousins 1-time removed이며, Claire와 Chris는 1st cousins-in-law이다.

그림 1: 첫 번째 예제의 가계도

입력

입력은 가계도 하나와 질의 목록으로 이루어진다.

첫째 줄에 가계도를 만드는 관계의 개수 rr (1≤r≤2001 \le r \le 200)이 주어진다. 다음 rr개 줄에는 세 문자열 name1, name2, relation이 공백 하나로 구분되어 주어진다. 모든 이름은 영문자로만 이루어지고 서로 다르다. relation은 husband, wife, son, daughter 중 하나이며, 각 줄은 "name1은 name2의 relation이다"로 읽는다.

다음 줄에 질의의 개수 qq (1≤q≤2001 \le q \le 200)가 주어진다. 다음 qq개 줄에는 서로 다른 두 이름 name1과 name2가 공백 하나로 구분되어 주어진다. 두 이름 모두 가계도에 있다.

주어진 관계만으로 가계도에 있는 모든 사람의 성별을 알아낼 수 있다. 각 결혼에서 부모가 입력에 함께 주어진 사람은 많아야 한 명이다. 질의로 주어진 두 사람은 아래에서 정의하는 관계 중 정확히 하나로 이어져 있다.

출력

질의마다 name1이 name2의 무엇인지 한 줄로 출력한다.

먼저 혈연 거리를 정의한다. 어떤 사람의 조상은 자기 자신, 부모, 부모의 부모, 이런 식으로 거슬러 올라간 사람 전부이고, 자기 자신까지의 거리는 00이다. 두 사람 XX와 YY의 공통 조상 중 a+ba + b가 가장 작은 사람을 고른다. 여기서 aa는 XX에서 그 조상까지 올라가는 세대 수이고, bb는 YY에서 같은 조상까지 올라가는 세대 수이다. 이렇게 얻은 순서쌍을 (a,b)(a, b)라 하자. 공통 조상이 없으면 두 사람은 혈연이 아니다.

각 질의는 다음 순서로 판정한다.

  1. name1이 name2의 배우자이면 name1의 성별에 따라 name1 is the husband of name2 또는 name1 is the wife of name2를 출력한다.
  2. 그렇지 않고 name1과 name2가 혈연이면 두 사람의 (a,b)(a, b)로 아래 호칭을 만들고 -in-law는 붙이지 않는다.
  3. 그렇지 않고 name1의 배우자가 name2와 혈연이면 그 두 사람의 (a,b)(a, b)로 아래 호칭을 만들고 -in-law를 붙인다.
  4. 위 세 경우가 모두 아니면 name2의 배우자가 name1과 혈연이다. 그 두 사람의 (a,b)(a, b)로 아래 호칭을 만들고 -in-law를 붙인다.

네 경우 모두 남자 단어와 여자 단어 중 무엇을 쓸지는 name1의 성별을 따른다. 아래에서 WW는 결혼 때문에 생긴 관계이면 -in-law이고, 아니면 빈 문자열이다.

  • a=0a = 0: name1은 name2보다 bb세대 위의 조상이다. 남자면 father, 여자면 mother에서 시작한다. b=1b = 1이면 그대로 두고, b=2b = 2이면 앞에 grand를 붙이며, b≥3b \ge 3이면 grand를 붙인 뒤 그 앞에 great 를 b−2b - 2번 붙인다. 이렇게 만든 단어를 X라 하고 name1 is the XW of name2를 출력한다.
  • b=0b = 0: 방향이 반대이다. 남자면 son, 여자면 daughter에서 시작해 같은 규칙을 적용하면 son, grandson, great grandson, great great grandson처럼 된다. name1 is the XW of name2를 출력한다.
  • a=1a = 1이고 b=1b = 1: 남자면 name1 is the brotherW of name2, 여자면 name1 is the sisterW of name2를 출력한다.
  • a=1a = 1이고 b≥2b \ge 2: 남자면 uncle, 여자면 aunt에서 시작해 앞에 great 를 b−2b - 2번 붙인 단어를 X라 하고 name1 is the XW of name2를 출력한다.
  • a≥2a \ge 2이고 b=1b = 1: 남자면 nephew, 여자면 niece에서 시작해 앞에 great 를 a−2a - 2번 붙인 단어를 X라 하고 name1 is the XW of name2를 출력한다.
  • a≥2a \ge 2이고 b≥2b \ge 2: 두 사람은 사촌이다. d=min⁡(a,b)−1d = \min(a, b) - 1, k=∣a−b∣k = |a - b|라 하자. name1 and name2 are D cousinsW를 출력한다. D는 dd 뒤에 영어 서수 접미사를 붙인 것으로, 끝 두 자리가 1111, 1212, 1313이면 th를 붙이고, 그렇지 않으면 끝자리가 11이면 st, 22이면 nd, 33이면 rd, 나머지는 th를 붙인다. 그러면 1st, 2nd, 3rd, 4th, 11th, 12th, 13th, 21st, 22nd, 23rd처럼 된다. k≥1k \ge 1이면 뒤에 공백 하나와 kk를 쓰고, k=1k = 1이면 -time removed를, k≥2k \ge 2이면 -times removed를 이어 붙인다.

예제2

  1. 예제 1

    입력
    10
    Alex Alice husband
    Ben Alex son
    Chase Ben son
    Diva Chase daughter
    Carol Ben daughter
    Belle Alex daughter
    Chris Chase wife
    Blake Belle husband
    Billie Ben wife
    Claire Belle daughter
    10
    Claire Carol
    Claire Diva
    Claire Chris
    Billie Belle
    Billie Chris
    Billie Chase
    Belle Carol
    Blake Carol
    Carol Belle
    Carol Blake
    
    예상 출력
    Claire and Carol are 1st cousins
    Claire and Diva are 1st cousins 1-time removed
    Claire and Chris are 1st cousins-in-law
    Billie is the sister-in-law of Belle
    Billie is the mother-in-law of Chris
    Billie is the mother of Chase
    Belle is the aunt of Carol
    Blake is the uncle-in-law of Carol
    Carol is the niece of Belle
    Carol is the niece-in-law of Blake
    
  2. 예제 2

    입력
    1
    Adam Eve husband
    2
    Adam Eve
    Eve Adam
    
    예상 출력
    Adam is the husband of Eve
    Eve is the wife of Adam