#include "bits/stdc++.h"
#define dbg(X) cerr<<#X<<": "<<X<<'\n'
#define cer(v_) {cerr<<#v_<<": "; for(ll i_ : v_) cerr<<i_<< " ";cerr<<'\n';}
using namespace std;
using ll = int;
const ll maxn = 140005;
const ll lg = 20;
ll n,q;
vector<ll> g[maxn];
vector<ll> add[maxn][2];
vector<ll> del[maxn][2];
set<ll> s[2];
ll st[lg][maxn];
ll in[maxn],out[maxn],ti = 0;
ll deg[maxn];
bool intree(ll x,ll y){return in[x]<=in[y]&&out[x]>=out[y];}
ll lca(ll x,ll y){
if(intree(x,y)) return x;
if(intree(y,x)) return y;
for(ll j = lg-1;j>=0;j--){
if(!intree(st[j][x],y)) x = st[j][x];
}
return st[0][x];
}
void dfs(ll u,ll p){
in[u] = ++ti;
st[0][u] = p;
for(ll s : g[u]){
if(s==p) continue;
dfs(s,u);
}
out[u] = ti;
}
vector<ll> v[2*maxn];
map<ll,ll> id;
bool oki = 1;
void adde(ll u,ll s){
v[u].push_back(s);
v[s].push_back(u);
deg[u]++;
deg[s]++;
}
void dfs2(ll u,ll p){
ll mx = 1000000000,mn = 0;
if(!s[1].empty()){
adde(u,id[*s[1].begin()]+n);
mx = *s[1].begin();
}
if(!s[0].empty()){
adde(u,id[*prev(s[0].end())]+n);
mn = *prev(s[0].end());
}
if(mn>mx) oki = 0;
for(ll e = 0;e<2;e++){
for(ll x : add[u][e]){
s[e].insert(x);
}
}
for(ll e = 0;e<2;e++){
for(ll x : del[u][e]){
s[e].erase(x);
}
}
for(ll s : g[u]){
if(s==p) continue;
dfs2(s,u);
}
for(ll e = 0;e<2;e++){
for(ll x : del[u][e]){
s[e].insert(x);
}
}
for(ll e = 0;e<2;e++){
for(ll x : add[u][e]){
s[e].erase(x);
}
}
}
ll itr[maxn];
ll val[maxn];
ll koj[maxn];
bool vis[maxn];
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n;
for(ll i = 1;i<n;i++){
ll x,y; cin >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
dfs(1,1);
for(ll j = 1;j<lg;j++){
for(ll i = 1;i<=n;i++) st[j][i] = st[j-1][st[j-1][i]];
}
cin >> q;
for(ll i = 1;i<=q;i++){
char tip; ll x,y,z;
cin >> tip >> x >> y >> z;
id[z] = i;
val[i] = z;
ll up = lca(x,y);
if(x==up||y==up){
add[up][tip=='M'].push_back(z);
del[x^y^up][tip=='M'].push_back(z);
}else{
add[up][tip=='M'].push_back(z);
del[x][tip=='M'].push_back(z);
del[y][tip=='M'].push_back(z);
}
}
dfs2(1,1);
if(!oki){
assert(0);
return 0;
}
iota(itr+1,itr+1+q,n+1);
sort(itr+1,itr+1+q,[](ll i,ll j){
return v[i].size()<v[j].size();
});
queue<ll> qu;
ll j = 1;
while(!qu.empty()||j<=q){
if(!qu.empty()){
ll u = qu.front(); qu.pop();
if(vis[u]) continue;
for(ll s : v[u]){
if(koj[s]==0){
koj[s] = u;
vis[u] = 1;
for(ll f : v[s]){
deg[f]--;
if(deg[f]==1){
qu.push(f);
}
}
break;
}
}
if(!vis[u]) oki = 0;
}else{
ll u = itr[j]; j++;
if(vis[u]) continue;
for(ll s : v[u]){
if(koj[s]==0){
koj[s] = u;
vis[u] = 1;
for(ll f : v[s]){
deg[f]--;
if(deg[f]==1){
qu.push(f);
}
}
break;
}
}
if(!vis[u]) oki = 0;
}
}
if(!oki){
cout<<-1<<'\n';
return 0;
}
for(ll i = 2;i<=n;i++){
ll j = st[0][i];
if(koj[i]==0) koj[i] = n;
cout<<i<< " "<<j<< " "<<val[koj[i]-n]<<'\n';
}
return 0;
}