#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+10,M=2e5+10;
int n,m,tot,Sg[N],Sh[N],ans[N];
int fa[N],ver[M],nex[M],head[N],vis[N];
vector<int> query[N],query_id[N];
char cow[N],Q[N];
int Find(int x) {return fa[x]==x?x:fa[x]=Find(fa[x]);}
void add(int x,int y){ver[++tot]=y,nex[tot]=head[x],head[x]=tot;}
void add_query(int x,int y,int id)
{
query[x].push_back(y);query_id[x].push_back(id);
query[y].push_back(x);query_id[y].push_back(id);
}
void dfs(int x,int fa,int sh,int sg)
{
for(int i=head[x];i;i=nex[i])
{
int y=ver[i];
if(y==fa) continue;
if(cow[y]=='H') Sh[y]=sh+1,Sg[y]=sg,dfs(y,x,sh+1,sg);
else Sh[y]=sh,Sg[y]=sg+1,dfs(y,x,sh,sg+1);
}
}
void tarjan(int x)
{
vis[x]=1;
for(int i=head[x];i;i=nex[i])
{
int y=ver[i];
if(vis[y]) continue;
tarjan(y);
fa[y]=x;
}
for(int i=0;i<query[x].size();i++)
{
int y=query[x][i],id=query_id[x][i];
if(vis[y]==2)
{
int lca=Find(y);
if(Q[id]=='H')
{
int plus=(cow[lca]=='H'?1:0);
int Hsum=Sh[x]+Sh[y]-2*Sh[lca]+plus;
if(Hsum) ans[id]=1;
}
else if(Q[id]=='G')
{
int plus=(cow[lca]=='G'?1:0);
int Gsum=Sg[x]+Sg[y]-2*Sg[lca]+plus;
if(Gsum) ans[id]=1;
}
}
}
vis[x]=2;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) cin>>cow[i];
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
if(cow[1]=='H') Sh[1]=1,dfs(1,0,1,0);
else Sg[1]=1,dfs(1,0,0,1);
//for(int i=1;i<=n;i++){printf("%d %d\n",Sh[i],Sg[i]);}
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add_query(x,y,i);
cin>>Q[i];
}
tarjan(1);
for(int i=1;i<=m;i++) printf("%d",ans[i]);
return 0;
}
WA掉了2,8,9三个点,dalao能帮忙看下吗555...