#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k;
string s;
int power(int l){
	int m=1;
	for(int i=1;i<=l;i++){
		m*=2;
	}
	return m;
}
int revi(char a,char b){
	if(a=='P'&&b=='R'){
		return a;
	}
	if(a=='P'&&b=='S'){
		return b;
	}
	if(a=='S'&&b=='P'){
		return a;
	}
	if(a=='S'&&b=='R'){
		return b;
	}
	if(a=='R'&&b=='S'){
		return a;
	}
	return b;
}
void last10(){
	char c[10005];
	int m=power(k);
	for(int i=1;i<=m;i++){
		if(i%n==0){
			c[i]=s[n-1];
		}
		else{	
			c[i]=s[i%n-1];
		}
	}
	while(m!=1){
		m/=2;
		for(int i=1;i<=m;i++){
			c[i]=revi(c[i*2-1],c[i*2]);
		}
	}
	cout<<c[1];
}
signed main() {
	cin>>n>>k;
	cin>>s;
	if(k>10){
		char c[205];
		for(int i=1;i<=2*n;i++){
			if(i%n==0){
				c[i]=s[n-1];
			}
			else{	
				c[i]=s[i%n-1];
			}
		}
		while(k>10){
			k--;
			for(int i=1;i<=n;i++){
				c[i]=revi(c[i*2-1],c[i*2]);
			}
			for(int i=1;i<=2*n;i++){
				if(i%n==0){
					c[i]=c[n];
				}
				else{	
					c[i]=c[i%n];
				}
			}
		}
		for(int i=1;i<=n;i++){
			s[i-1]=c[i];
		}
	}
	last10();
	

	return 0;
}

#include <bits/stdc++.h>

#define rep(i,n) for(int i=0;i<n;++i)
#define repn(i,n) for(int i=1;i<=n;++i)
#define LL long long
#define pii pair <LL,LL>
#define fi first
#define se second
#define pb push_back
#define mpr make_pair

using namespace std;

const LL MOD=1e9+7;

LL n,q,a[200010],b[200010],depth[200010],st[200010],ed[200010],to[200010],ans[200010],len=0,
n2=1,dat[800010];
vector <LL> g[200010];

void dfs(LL pos,LL par,LL d)
{
  depth[pos]=d;
  st[pos]=len++;
  to[st[pos]]=pos;
  rep(i,g[pos].size()) if(g[pos][i]!=par) dfs(g[pos][i],pos,d+1);
  ed[pos]=len-1;
}

void upd(LL k,LL lb,LL ub,LL tlb,LL tub,LL val)
{
  //if(lb==0&&ub==n2-1) cout<<tlb<<' '<<tub<<' '<<val<<"stane\n";
  if(ub<tlb||tub<lb) return;
  if(tlb<=lb&&ub<=tub)
  {
    dat[k]+=val;
    return;
  }
  upd(k*2+1,lb,(lb+ub)/2,tlb,tub,val);
  upd(k*2+2,(lb+ub)/2+1,ub,tlb,tub,val);
}

void get(LL k,LL lb,LL ub)
{
  if(lb==ub)
  {
    if(lb<n) ans[to[lb]]=dat[k];
    return;
  }
  dat[k*2+1]+=dat[k];
  dat[k*2+2]+=dat[k];
  get(k*2+1,lb,(lb+ub)/2);
  get(k*2+2,(lb+ub)/2+1,ub);
}

int main()
{
  cin>>n;
  rep(i,n-1)
  {
    scanf("%lld%lld",&a[i],&b[i]);
    g[a[i]].pb(b[i]);
    g[b[i]].pb(a[i]);
  }
  dfs(1,0,0);
  while(n2<n) n2*=2;
  cin>>q;
  LL x,y,z;
  rep(qn,q)
  {
    scanf("%lld%lld%lld",&x,&y,&z);
    --y;
    LL from=a[y],no=b[y];
    if(x==2) swap(from,no);
    if(depth[no]<depth[from]) upd(0,0,n2-1,st[from],ed[from],z);
    else
    {
      upd(0,0,n2-1,0,n-1,z);
      upd(0,0,n2-1,st[no],ed[no],-z);
    }
  }
  get(0,0,n2-1);
  repn(i,n) printf("%lld\n",ans[i]);
	return 0;
}