당신은 나의 누구인가요

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

문제

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

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

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

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

  • fathermother는 자녀의 부모이다.
  • brothersister는 부모가 같은 남자 형제와 여자 형제이다.
  • sondaughter는 부모의 자녀이다.
  • uncleaunt는 자녀의 부모와 형제자매인 남자와 여자이다.
  • nephewniece는 형제자매의 남자 자녀와 여자 자녀이다.
  • grandfathergrandmother는 자녀의 부모의 아버지와 어머니이다.
  • great grandfathergreat grandmother는 자녀의 조부모의 아버지와 어머니이다.
  • great unclegreat 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은 첫 번째 예제의 가계도이다. 이 가계도에서 ClaireCarol1st cousins이고, ClaireDiva1st cousins 1-time removed이며, ClaireChris1st cousins-in-law이다.

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

입력

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

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

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

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

출력

질의마다 name1name2의 무엇인지 한 줄로 출력한다.

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

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

  1. name1name2의 배우자이면 name1의 성별에 따라 name1 is the husband of name2 또는 name1 is the wife of name2를 출력한다.
  2. 그렇지 않고 name1name2가 혈연이면 두 사람의 (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: name1name2보다 bb세대 위의 조상이다. 남자면 father, 여자면 mother에서 시작한다. b=1b = 1이면 그대로 두고, b=2b = 2이면 앞에 grand를 붙이며, b3b \ge 3이면 grand를 붙인 뒤 그 앞에 great b2b - 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이고 b2b \ge 2: 남자면 uncle, 여자면 aunt에서 시작해 앞에 great b2b - 2번 붙인 단어를 X라 하고 name1 is the XW of name2를 출력한다.
  • a2a \ge 2이고 b=1b = 1: 남자면 nephew, 여자면 niece에서 시작해 앞에 great a2a - 2번 붙인 단어를 X라 하고 name1 is the XW of name2를 출력한다.
  • a2a \ge 2이고 b2b \ge 2: 두 사람은 사촌이다. d=min(a,b)1d = \min(a, b) - 1, k=abk = |a - b|라 하자. name1 and name2 are D cousinsW를 출력한다. Ddd 뒤에 영어 서수 접미사를 붙인 것으로, 끝 두 자리가 1111, 1212, 1313이면 th를 붙이고, 그렇지 않으면 끝자리가 11이면 st, 22이면 nd, 33이면 rd, 나머지는 th를 붙인다. 그러면 1st, 2nd, 3rd, 4th, 11th, 12th, 13th, 21st, 22nd, 23rd처럼 된다. k1k \ge 1이면 뒤에 공백 하나와 kk를 쓰고, k=1k = 1이면 -time removed를, k2k \ge 2이면 -times removed를 이어 붙인다.