#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
#define fi first
#define se second
#define pb push_back
//#define int long long
#define sz(a) (int)a.size()
#define all(a) begin(a),end(a)
#define uid(a, b) uniform_int_distribution<int>(a, b)(rng)
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
using ll = long long;
using vi = vector<int>;
using ar2 = array<int,2>;
using ar3 = array<int,3>;
const int mxN = (int)2e5+2;
const int INF = (int)2e9;
const ll LINF = (ll)2e18;
const int MOD = (int)1e9+7;
const int mxLg = 20;
int n, dfs_timer;
int st[mxN], en[mxN];
vector<ar2> adj[mxN];
int jmp[mxLg][mxN], mx[mxLg][mxN], mx2[mxLg][mxN];
bool isAnc(int a, int b){
return st[a]<=st[b] and en[a]>=en[b];
}
int lca(int a, int b){
if(isAnc(a,b)) return a;
if(isAnc(b,a)) return b;
for(int i = mxLg-1; i>=0; i--)
if(jmp[i][a] and !isAnc(jmp[i][a],b))
a = jmp[i][a];
return jmp[0][a];
}
int max1(int a, int b){
int ans = -1;
for(int i = mxLg-1; i>=0; i--)
if(jmp[i][a] and st[jmp[i][a]]>=st[b])
ans=max(ans, mx[i][a]), a = jmp[i][a];
return ans;
}
int max2(int a, int b){
multiset<int> S; S.clear();
for(int i = mxLg-1; i>=0; i--){
if(jmp[i][a] and st[jmp[i][a]]>=st[b]){
S.insert(mx[i][a]); S.insert(mx2[i][a]);
while(sz(S)>2) S.erase(begin(S));
a = jmp[i][a];
}
}
if(sz(S)>=2) return *prev(prev(end(S)));
return -1;
}
void dfs(int s, int p){
st[s] = ++dfs_timer;
for(auto [u,w] : adj[s]){
if(u==p) continue;
jmp[0][u] = s; mx[0][u] = w;
dfs(u,s);
}
en[s] = dfs_timer;
}
void solve(){
cin >> n;
memset(mx,-1,sizeof(mx));
memset(mx2,-1,sizeof(mx2));
for(int i = 1; i < n; i++){
int a, b, c; cin >> a >> b >> c;
adj[a].pb({b,c}), adj[b].pb({a,c});
}
dfs(1,0);
for(int j = 1; j < mxLg; j++){
for(int i = 1; i <= n; i++){
int k = jmp[j-1][i]; if(!k) continue;
jmp[j][i] = jmp[j-1][k];
mx[j][i] = max(mx[j-1][i], mx[j-1][k]);
mx2[j][i] = min(mx[j-1][i], mx[j-1][k]);
mx2[j][i] = max({mx2[j][i], mx2[j-1][i], mx2[j-1][k]});
}
}
int q; cin >> q;
while(q--){
int a, b; cin >> a >> b;
int c = lca(a,b);
if(st[a]>st[b]) swap(a,b);
if(c==a) cout << max2(b,a) << "\n";
else cout << max({min(max1(a,c),max1(b,c)), max2(a,c), max2(b,c)}) << "\n";
}
}
int32_t main(){
ios_base::sync_with_stdio(false); cin.tie(0);
int t = 1; //cin >> t;
while(t--) solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCi8vI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgc3ooYSkgKGludClhLnNpemUoKQojZGVmaW5lIGFsbChhKSBiZWdpbihhKSxlbmQoYSkKI2RlZmluZSB1aWQoYSwgYikgdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPGludD4oYSwgYikocm5nKQoKbXQxOTkzNyBybmcoY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKTsKCnVzaW5nIGxsID0gbG9uZyBsb25nOwp1c2luZyB2aSA9IHZlY3RvcjxpbnQ+Owp1c2luZyBhcjIgPSBhcnJheTxpbnQsMj47CnVzaW5nIGFyMyA9IGFycmF5PGludCwzPjsKCmNvbnN0IGludCBteE4gPSAoaW50KTJlNSsyOwpjb25zdCBpbnQgSU5GID0gKGludCkyZTk7CmNvbnN0IGxsIExJTkYgPSAobGwpMmUxODsKY29uc3QgaW50IE1PRCA9IChpbnQpMWU5Kzc7CmNvbnN0IGludCBteExnID0gMjA7CgppbnQgbiwgZGZzX3RpbWVyOwppbnQgc3RbbXhOXSwgZW5bbXhOXTsKdmVjdG9yPGFyMj4gYWRqW214Tl07CmludCBqbXBbbXhMZ11bbXhOXSwgbXhbbXhMZ11bbXhOXSwgbXgyW214TGddW214Tl07Cgpib29sIGlzQW5jKGludCBhLCBpbnQgYil7CglyZXR1cm4gc3RbYV08PXN0W2JdIGFuZCBlblthXT49ZW5bYl07Cn0KCmludCBsY2EoaW50IGEsIGludCBiKXsKCWlmKGlzQW5jKGEsYikpIHJldHVybiBhOwoJaWYoaXNBbmMoYixhKSkgcmV0dXJuIGI7Cglmb3IoaW50IGkgPSBteExnLTE7IGk+PTA7IGktLSkKCQlpZihqbXBbaV1bYV0gYW5kICFpc0FuYyhqbXBbaV1bYV0sYikpCgkJCWEgPSBqbXBbaV1bYV07CglyZXR1cm4gam1wWzBdW2FdOwp9CgppbnQgbWF4MShpbnQgYSwgaW50IGIpewoJaW50IGFucyA9IC0xOwoJZm9yKGludCBpID0gbXhMZy0xOyBpPj0wOyBpLS0pCgkJaWYoam1wW2ldW2FdIGFuZCBzdFtqbXBbaV1bYV1dPj1zdFtiXSkKCQkJYW5zPW1heChhbnMsIG14W2ldW2FdKSwgYSA9IGptcFtpXVthXTsKCXJldHVybiBhbnM7Cn0KCmludCBtYXgyKGludCBhLCBpbnQgYil7CgltdWx0aXNldDxpbnQ+IFM7IFMuY2xlYXIoKTsKCWZvcihpbnQgaSA9IG14TGctMTsgaT49MDsgaS0tKXsKCQlpZihqbXBbaV1bYV0gYW5kIHN0W2ptcFtpXVthXV0+PXN0W2JdKXsKCQkJUy5pbnNlcnQobXhbaV1bYV0pOyBTLmluc2VydChteDJbaV1bYV0pOwoJCQl3aGlsZShzeihTKT4yKSBTLmVyYXNlKGJlZ2luKFMpKTsKCQkJYSA9IGptcFtpXVthXTsKCQl9Cgl9CglpZihzeihTKT49MikgcmV0dXJuICpwcmV2KHByZXYoZW5kKFMpKSk7CglyZXR1cm4gLTE7Cn0KCnZvaWQgZGZzKGludCBzLCBpbnQgcCl7CglzdFtzXSA9ICsrZGZzX3RpbWVyOwoJZm9yKGF1dG8gW3Usd10gOiBhZGpbc10pewoJCWlmKHU9PXApIGNvbnRpbnVlOwoJCWptcFswXVt1XSA9IHM7IG14WzBdW3VdID0gdzsKCQlkZnModSxzKTsKCX0KCWVuW3NdID0gZGZzX3RpbWVyOwp9Cgp2b2lkIHNvbHZlKCl7CgljaW4gPj4gbjsgCgltZW1zZXQobXgsLTEsc2l6ZW9mKG14KSk7CgltZW1zZXQobXgyLC0xLHNpemVvZihteDIpKTsKCWZvcihpbnQgaSA9IDE7IGkgPCBuOyBpKyspewoJCWludCBhLCBiLCBjOyBjaW4gPj4gYSA+PiBiID4+IGM7CgkJYWRqW2FdLnBiKHtiLGN9KSwgYWRqW2JdLnBiKHthLGN9KTsKCX0KCWRmcygxLDApOwoJZm9yKGludCBqID0gMTsgaiA8IG14TGc7IGorKyl7CgkJZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewoJCQlpbnQgayA9IGptcFtqLTFdW2ldOyBpZighaykgY29udGludWU7CgkJCWptcFtqXVtpXSA9IGptcFtqLTFdW2tdOwoJCQlteFtqXVtpXSA9IG1heChteFtqLTFdW2ldLCBteFtqLTFdW2tdKTsKCQkJbXgyW2pdW2ldID0gbWluKG14W2otMV1baV0sIG14W2otMV1ba10pOwoJCQlteDJbal1baV0gPSBtYXgoe214MltqXVtpXSwgbXgyW2otMV1baV0sIG14MltqLTFdW2tdfSk7CgkJfQoJfQoJaW50IHE7IGNpbiA+PiBxOwoJd2hpbGUocS0tKXsKCQlpbnQgYSwgYjsgY2luID4+IGEgPj4gYjsKCQlpbnQgYyA9IGxjYShhLGIpOwoJCWlmKHN0W2FdPnN0W2JdKSBzd2FwKGEsYik7CgkJaWYoYz09YSkgY291dCA8PCBtYXgyKGIsYSkgPDwgIlxuIjsKCQllbHNlIGNvdXQgPDwgbWF4KHttaW4obWF4MShhLGMpLG1heDEoYixjKSksIG1heDIoYSxjKSwgbWF4MihiLGMpfSkgPDwgIlxuIjsKCX0KfQoKaW50MzJfdCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZSgwKTsKICAgIGludCB0ID0gMTsgLy9jaW4gPj4gdDsKICAgIHdoaWxlKHQtLSkgc29sdmUoKTsKfQ==