#include <bits/stdc++.h>
using namespace std;
int relations_num, questions_num;
int child, mom, papa;
char c, m, p;
char pp1, pp2;
int p1, p2;
int myChild[100];
int main() {
while (cin >> relations_num >> questions_num) {
for (int i = 0; i < 100; i++) myChild[i] = -1;
for (int i = 0; i < relations_num; i++) {
cin >> c >> m >>
p; //形式如ABC的字符串,表示A的父母亲分别是B和C
child = c - 'A';
if (myChild[child] == -1)
myChild[child] = child;
if (m != '-') {
mom = m - 'A';
myChild[mom] = child;
}
if (p != '-') {
papa = p - 'A';
myChild[papa] = child;
}
}
for (int i = 0; i < questions_num; i++) {
cin >> pp1 >> pp2; //形式如FA的字符串,表示询问F和A的关系
p1 = pp1 - 'A';
p2 = pp2 - 'A';
/*找一下p1p2的关系
因为不知道p1p2的关系,所以分类讨论一下
1.假设p1是长辈*/
bool p1_is_old = 1; //假设p1是长辈
bool p2_is_old = 1; //假设p2是长辈
char p = p1; //保存一下p1,p2
char q = p2;
int levelp = 0; //记录一下隔了几代
int levelq = 0;
//将p1作为长辈,开始找晚辈
while (p != q && myChild[p] != p) {
p = myChild[p];
levelp++;//记录找了几代
}
//判读一下p1是长辈这个假设成立与否
if (p != q) {
p1_is_old = 0; //p1不是长辈
}
//恢复原位
p = p1;
q = p2;
while (q != p && myChild[q] != q) {
q = myChild[q];
levelq++;
}
//判读一下p2是长辈这个假设成立与否
if (q != p) {
p2_is_old = 0; //p2不是长辈
}
if ((p1_is_old && p2_is_old) || (!p1_is_old && !p2_is_old)) {
cout << "-" << endl;
} else if (p1_is_old) {
if (levelp == 1) cout << "parent" << endl;
if (levelp > 1) {
for (int i = 0; i < levelp - 2; i++) {
cout << "great-";
}
cout << "grandparent" << endl;
}
} else if (p2_is_old) {
if (levelq == 1) cout << "child" << endl;
if (levelq > 1) {
for (int i = 0; i < levelq - 2; i++) {
cout << "great-";
}
cout << "grandchild" << endl;
}
}
}
}
}