Problem: A professor of anthropology was interested in people living in isolated islands and their history. He collected their family trees to conduct some anthropological experiment. For the experiment, he needed to process the family trees with a computer. For that purpose he translated them into text files. The following is an example of a text file representing a family tree.


John
Robert
Frank
Andrew
Nancy
David


Each line contains the given name of a person. The name in the first line is the oldest ancestor in this family tree. The family tree contains only the descendants of the oldest ancestor. Their husbands and wives are not shown in the family tree. The children of a person are indented with one more space than the parent. For example, Robert and Nancy are the children of John, and Frank and Andrew are the children of Robert. David is indented with one more space than Robert, but he is not a child of Robert, but of Nancy. To represent a family tree in this way, the professor excluded some people from the family trees so that no one had both parents in a family tree.

For the experiment, the professor also collected documents of the families and extracted the set of statements about relations of two persons in each family tree. The following are some examples of statements about the family above.


John is the parent of Robert.
Robert is a sibling of Nancy.
David is a descendant of Robert.


For the experiment, he needs to check whether each statement is true or not. For example, the first two statements above are true and the last statement is false. Since this task is tedious, he would like to check it by a computer program.



Input

The input contains several data sets. Each data set consists of a family tree and a set of statements. The first line of each data set contains two integers n (0 < n < 1000) and m (0 < m < 1000) which represent the number of names in the family tree and the number of statements, respectively. Each line of the input has less than 70 characters.

As a name, we consider any character string consisting of only alphabetic characters. The names in a family tree have less than 20 characters. The name in the first line of the family tree has no leading spaces. The other names in the family tree are indented with at least one space, i.e., they are descendants of the person in the first line. You can assume that if a name in the family tree is indented with k spaces, the name in the next line is indented with at most k + 1 spaces. This guarantees that each person except the oldest ancestor has his or her parent in the family tree. No name appears twice in the same family tree. Each line of the family tree contains no redundant spaces at the end.

Each statement occupies one line and is written in one of the following formats, where X and Y are different names in the family tree.


X is a child of Y.
X is the parent of Y.
X is a sibling of Y.
X is a descendant of Y.
X is an ancestor of Y.


Names not appearing in the family tree are never used in the statements. Consecutive words in a statement are separated by a single space. Each statement contains no redundant spaces at the beginning and at the end of the line.

The end of the input is indicated by two zeros.

Output

For each statement in a data set, your program should output one line containing True or False. The first letter of True or False in the output must be a capital. The output for each data set should be followed by an empty line.

Examples

Input

6 5
John
 Robert
  Frank
  Andrew
 Nancy
  David
Robert is a child of John.
Robert is an ancestor of Andrew.
Robert is a sibling of Nancy.
Nancy is the parent of Frank.
John is a descendant of Andrew.
2 1
abc
 xyz
xyz is a child of abc.
0 0


Output

True
True
True
False
False

True


Input

6 5
John
Robert
Frank
Andrew
Nancy
David
Robert is a child of John.
Robert is an ancestor of Andrew.
Robert is a sibling of Nancy.
Nancy is the parent of Frank.
John is a descendant of Andrew.
2 1
abc
xyz
xyz is a child of abc.
0 0


Output

True
True
True
False
False

True

Solution (in CPP):

Solution:
#include <iostream>
#include <string>
#include <map>
using namespace std;

int n, m;
int parent[1000];			//親の番号
int indent_table[1000];		//そのインデントに対する、親の番号
map<string,int> names;		//名前と番号の対応

//XがYの親であるかどうかを判定。
bool is_parent(int x_num, int y_num){
	if( x_num == parent[y_num] ){ return true; }
	return false;
}

//XとYが兄弟であるか(すなわち、親が同じであるか)を判定。
bool is_sibling(int x_num, int y_num){
	if( parent[x_num] == parent[y_num] ){ return true; }
	return false;
}

//XがYの先祖であるかを判定。
//Yの親を順に辿っていき、途中でXと等しくなったらtrueを返す。
bool is_ancestor(int x_num, int y_num){
	while( y_num >= 0 ){
		if( x_num == y_num ){ return true; }
		y_num = parent[y_num];
	}
	return false;
}

int main(){
	string person;

	while(true){
		cin >> n >> m;
		if( m == 0 ) break;

		names.clear();

		indent_table[0] = -1;	//最初の人に親はいないので、-1としておく。

		cin.ignore();	//改行が邪魔なので、一文字飛ばす
		for(int i = 0; i < n; ++i){
			getline(cin, person);
			int indent = person.find_first_not_of(" ");
				//インデントを数える。
				//インデントを除いた person.substr(indent) が、実際の名前

			names[person.substr(indent)] = i;	//その人をi番とする。
			parent[i] = indent_table[indent];	//親の番号を決定する。
			indent_table[indent + 1] = i;		//子のためにテーブルを更新。
		}
		
		string X, Y, rel;	//X, Yおよびその関係
		string ign;	//無視する文字列
		for(int i = 0; i < m; ++i){
			cin >> X >> ign >> ign >> rel >> ign >> Y;
				//is, (a/an/the), of は無視する。
			Y.resize(Y.size() - 1);	//最後に . が含まれるので、除去。

			int x_num = names[X];
			int y_num = names[Y];	//XおよびYに対応する番号を取得
			bool ans = false;
			
			if( rel == "child" ){
				ans = is_parent(y_num, x_num);
			}
			else if( rel == "parent" ){
				ans = is_parent(x_num, y_num);
			}
			else if( rel == "sibling" ){
				ans = is_sibling(x_num, y_num);
			}
			else if( rel == "descendant" ){
				ans = is_ancestor(y_num, x_num);
			}
			else if( rel == "ancestor" ){
				ans = is_ancestor(x_num, y_num);
			}
			
			if( ans ){ cout << "True\n"; }
			else{ cout << "False\n"; }
		}
		
		cout << '\n';
	}
}