#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
typedef vector<string>VS;
struct S{string p;VS v;};
map<string,S>m;
int A(string a,string n)
{
	if(m[n].p.empty())return 0;
	if(m[n].p==a)return 1;
	return A(a,m[n].p);
}
int main()
{
	int N,M,i,c,f;
	string s,t,x,y;
	while(cin>>N>>M,N)
	{
		VS v;
		m.clear();
		getline(cin,s);
		getline(cin,s);
		m[s].p="";
		v.push_back(s);
		for(i=1;i<N;++i)
		{
			getline(cin,s);
			c=count(s.begin(),s.end(),' ');
			s=s.substr(c);
			while(v.size()>c)v.pop_back();
			m[s].p=v.back();
			m[v.back()].v.push_back(s);
			v.push_back(s);
		}
		for(i=0;i<M;++i)
		{
			getline(cin,s);
			v.clear();
			for(;;)
			{
				c=s.find(' ');
				if(c==string::npos)break;
				v.push_back(s.substr(0,c));
				s=s.substr(c+1);
			}
			x=v[0];
			y=s;
			y.erase(y.size()-1);
			t=v[3];
			if(t=="child")f=(m[x].p==y);
			if(t=="parent")f=(m[y].p==x);
			if(t=="sibling")f=(m[x].p==m[y].p);
			if(t=="descendant")f=A(y,x);
			if(t=="ancestor")f=A(x,y);
			cout<<(f?"True\n":"False\n");
		}cout<<endl;
	}
	return 0;
}