#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';
	}
}