#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <map>

using namespace std;

int m,n;

struct nodeInfo{
    int depth;
};

map<string,int> id;
vector<int> G[1010];
nodeInfo nif[1010];

int backNode(int cnode,int cnt){
    for(int i = 0; i < cnt; i++){
        for(int j = 0; j < G[cnode].size(); j++){
            // ツ親ツノツーツドツづ個づ卍つ、ツつェツ深ツつウツつェツ静ウツつ「
            if(nif[G[cnode][j]].depth<nif[cnode].depth){
                cnode=G[cnode][j];
                break;
            }
        }
    }
    return cnode;
}
bool isChild(int n1idx,int n2idx){
    return n2idx==backNode(n1idx,1);
}
bool isAncestor(int n1idx,int n2idx){
    int cnode=n2idx;
    while(1){
        if(cnode==n1idx)
            return true;
        // ツ親ツづ可つウツつゥツづ個づ堋づゥ
        if(cnode==0)
            return false;
        else
            cnode=backNode(cnode,1);
    }
}

int main(){
    while(cin>>n>>m&&!(n==0&&m==0)){
        id.clear();
        string str;
        getline(cin,str);
        for(int i = 0; i < 1010; i++)G[i].clear();
        int depth=-1;
        int cp=-1;
        for(int i = 0; i < n; i++){
            getline(cin,str);
            int cnt=0;
            for(int j = 0; ;j++){
                if(str[j]==' ')
                    continue;
                else{
                    str=str.substr(j);
                    cnt=j;
                    break;
                }
            }
            id[str]=i;
            // cntツづ個青板つセツつッツ親ツづ可姪淞づィツ、ツつサツつアツづ可ノツーツドツづーツ挿ツ禿シツつキツづゥ
            if(cp!=-1){
                if(depth<cnt){
                    G[cp].push_back(i);
                    G[i].push_back(cp);
                }
                else{
                    int back=backNode(cp,depth-cnt+1);
                    G[back].push_back(i);
                    G[i].push_back(back);
                }
            }
            cp=i;
            depth=cnt;
            nif[i].depth=depth;
        }
        for(int j = 0; j < m; j++){
            string name1,name2,tmp,order;
            cin>>name1>>tmp>>tmp>>order>>tmp>>name2;
            name2=name2.substr(0,name2.size()-1);
            int n1idx=id[name1];
            int n2idx=id[name2];
            bool match=false;
            if(order=="child")
                match=isChild(n1idx,n2idx);
            else if(order=="ancestor")
                match=isAncestor(n1idx,n2idx);
            else if(order=="sibling"){
                int cnode=backNode(n1idx,1);
                for(int i = 0; i < G[cnode].size(); i++){
                    int to=G[cnode][i];
                    match=(nif[n1idx].depth==nif[to].depth&&to==n2idx);
                    if(match)
                        break;
                }
            }
            else if(order=="parent")
                match=isChild(n2idx,n1idx);
            else
                match=isAncestor(n2idx,n1idx);
            if(match)
                cout<<"True"<<endl;
            else
                cout<<"False"<<endl;
        }
        cout<<endl;
    }
    return 0;
}