#include <bits/stdc++.h>   using namespace std;   const unsigned long long int mod = 1e9 + 7;   const long long int inf = (long long int)1e18 + 2;   const long long int N = (long long int)1e6 + 2;   vector<vector<pair<long long int, long long int>>> graph;   vector<long long int> ans;   long long int visi[5005];   long long int dfs(long long int src, long long int des, long long int val) {     if (src == des) return 1;     visi[src] = 1;     for (auto x : graph[src]) {       if (!visi[x.first]) {         if (dfs(x.first, des, val)) {           ans[x.second] = max(ans[x.second], val);           return 1;         }       }     }     return 0;   }   long long int ck = 0;   long long int dfs2(long long int src, long long int des, long long int cur) {     if (src == des) return cur == ck;     visi[src] = 1;     for (auto x : graph[src]) {       if (!visi[x.first]) {         if (dfs2(x.first, des, min(cur, ans[x.second]))) {           return 1;         }       }     }     return 0;   }   void solve() {     long long int n, a, b, c;     cin >> n;     graph.resize(n);     ans.resize(n);     for (long long int i = 0; i < n - 1; i++) {       cin >> a >> b;       a--, b--;       graph[a].push_back({b, i});       graph[b].push_back({a, i});       ans[i] = 1;     }     long long int m;     cin >> m;     vector<pair<pair<long long int, long long int>, long long int>> st;     for (long long int i = 0; i < m; i++) {       cin >> a >> b >> c;       a--, b--;       st.push_back({{a, b}, c});       memset(visi, 0, sizeof(visi));       dfs(a, b, c);     }     for (long long int i = 0; i < m; i++) {       memset(visi, 0, sizeof(visi));       ck = st[i].second;       if (!dfs2(st[i].first.first, st[i].first.second, inf)) {         cout << -1 <<   n ;         return;       }     }     for (long long int i = 0; i < n - 1; i++) cout << ans[i] <<    ;     cout <<   n ;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     long long int t;     t = 1;     while (t--) {       solve();     }     cerr <<   nTime elapsed:   << 1000 * clock() / CLOCKS_PER_SEC <<  ms n ;     return 0;   }   