#include <bits/stdc++.h>
using namespace std;
int dep[100010];
int par[100010][19];
vector<int> g[100010];
void dfs(int v,int u,int d){
  dep[v]=d;
  for(int i=0; i<g[v].size(); i++){
    int w=g[v][i];if(w==u) continue;
    par[w][0]=v;dfs(w,v,d+1);
  }
}
int lcp(int a,int b){
  if(dep[a]<dep[b]) swap(a,b);
  for(int i=0; i<19; i++){
    if((dep[a]-dep[b])&(1<<i)) a=par[a][i];
  }
  if(a==b) return a;
  for(int i=18;i>=0;i--){
    if(par[a][i]!=par[b][i]) a=par[a][i],b=par[b][i];
  }
  return par[a][0];
}
int n,m;
void init() {
  memset(par,0,sizeof(par));
  dfs(0,-1,0);
  for(int i=0; i<18; i++)for(int j=0; j<n; j++) par[j][i+1]=par[par[j][i]][i];
}

string r[111111];
int main() {
  while(cin >> n >> m && n) {
    for(int i=0; i<n; i++) g[i].clear();
    string s;
    getline(cin,s);
    map<string,int> ma;
    for(int i=0; i<n; i++) {
      getline(cin,s);
      stringstream ss;
      string t;
      ss << s;
      ss >> t;
      ma[t]=i;
      int c=0;
      for(int j=0; j<s.size(); j++) {
        if(s[j]==' ') c++;
        else break;
      }
      if(c) {
        g[ma[t]].push_back(ma[r[c-1]]);
        g[ma[r[c-1]]].push_back(ma[t]);
      }
      r[c]=t;
    }
    init();
    while(m--) {
      getline(cin,s);
      stringstream ss;
      ss << s;
      string x,y,z;
      ss >> x;
      ss >> z;ss >> z;ss >> z;
      ss >> y;ss >> y;
      y=y.substr(0,y.size()-1);
      int xx=ma[x],yy=ma[y];
      bool f=0;
      if(z=="parent") {
        if(lcp(xx,yy)==xx&&dep[yy]-dep[xx]==1) f=1;
      } else if(z=="child") {
        if(lcp(xx,yy)==yy&&dep[xx]-dep[yy]==1) f=1;
      } else if(z=="sibling") {
        if(dep[xx]==dep[yy]&&dep[xx]-dep[lcp(xx,yy)]==1) f=1;
      } else if(z=="descendant") {
        if(lcp(xx,yy)==yy&&dep[xx]-dep[yy]>=1) f=1;
      } else {
        if(lcp(xx,yy)==xx&&dep[yy]-dep[xx]>=1) f=1;
      }
      if(f) cout << "True" << endl;
      else cout << "False" << endl;
    }
    cout << endl;
  }
  return 0;
}
