/// vn.spoj.com/problems/LUBENICA/
/// sparse table for lca&rmq
#include <bits/stdc++.h>
using namespace std;
#define tag "spoj"
#define maxn 100007
#define maxlog ((int)log2(n)+2)
#define module 0
#define oo 1000000007
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
int n,m;
struct neigh{ int ver,wei; };
vector< vector<neigh> > adj;
struct nodeTree
{
vector<int> par;
vector<int> emax;
vector<int> emin;
int depth;
void reset()
{
par.resize(maxlog,0);
emax.resize(maxlog,0);
emin.resize(maxlog,0);
depth=0;
}
};
#define ances(u,i) infor[(u)].par[i]
#define emax(u,i) infor[(u)].emax[i]
#define emin(u,i) infor[(u)].emin[i]
#define par(u) infor[(u)].par[0]
#define depth(u) infor[(u)].depth
vector<nodeTree> infor;
void dfs(const int &u,const int &parent,const int &depth,const int &wei)
{
par(u)=parent;
emax(u,0)=wei;
emin(u,0)=wei;
depth(u)=depth;
for(const neigh &nei: adj[u])
if(nei.ver!=par(u))
dfs(nei.ver,u,depth+1,nei.wei);
}
void dplca(const int &N)
{
///dp:
for(int j=1;1<<j<N;j++)
for(int i=1;i<=N;i++)
{
ances(i,j)=ances(ances(i,j-1),j-1);
emin(i,j)=min(emin(i,j-1),emin(ances(i,j-1),j-1));
emax(i,j)=max(emax(i,j-1),emax(ances(i,j-1),j-1));
}
}
struct query{ int lcanc,emi,ema; };
query lca(int u,int v)
{
int ema=-oo,emi=+oo;
if(depth(u)<depth(v)) swap(u,v);
while(depth(u)>depth(v))
{
emi=min(emi,emin(u,(int)log2(depth(u)-depth(v))));
ema=max(ema,emax(u,(int)log2(depth(u)-depth(v))));
u=ances(u,(int)log2(depth(u)-depth(v)));
}
int log=log2(depth(u));
while(u!=v)
{
while(ances(u,log)==ances(v,log) && log) --log;
emi=min(emi,emin(u,log));
ema=max(ema,emax(u,log));
emi=min(emi,emin(v,log));
ema=max(ema,emax(v,log));
u=ances(u,log),v=ances(v,log);
}
return {u,emi,ema};
}
int main()
{
#ifdef dmdd
freopen(tag".inp","r",stdin); freopen(tag".out","w",stdout);
#endif // dmdd
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n;
adj.resize(n+1);
int x,y,z;
for(int i=1;i<n;i++)
cin>>x>>y>>z,adj[x].push_back({y,z}),adj[y].push_back({x,z});
infor.resize(n+1);
for(int i=0;i<=n;i++) infor[i].reset();
dfs(1,0,1,0);
dplca(n);
cin>>m;
query res;
while(m-->0)
{
cin>>x>>y;
res=lca(x,y);
cout<<res.emi<<" "<<res.ema<<"\n";
}
return 0;
}
Ly8vIHZuLnNwb2ouY29tL3Byb2JsZW1zL0xVQkVOSUNBLwoKLy8vIHNwYXJzZSB0YWJsZSBmb3IgbGNhJnJtcQojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSB0YWcgInNwb2oiCiNkZWZpbmUgbWF4biAxMDAwMDcKI2RlZmluZSBtYXhsb2cgKChpbnQpbG9nMihuKSsyKQojZGVmaW5lIG1vZHVsZSAwCiNkZWZpbmUgb28gMTAwMDAwMDAwNwovLy8+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+CmludCBuLG07CnN0cnVjdCBuZWlnaHsgaW50IHZlcix3ZWk7IH07CnZlY3RvcjwgdmVjdG9yPG5laWdoPiA+IGFkajsKc3RydWN0IG5vZGVUcmVlCnsKICAgIHZlY3RvcjxpbnQ+IHBhcjsKICAgIHZlY3RvcjxpbnQ+IGVtYXg7CiAgICB2ZWN0b3I8aW50PiBlbWluOwogICAgaW50IGRlcHRoOwogICAgdm9pZCByZXNldCgpCiAgICB7CiAgICAgICAgcGFyLnJlc2l6ZShtYXhsb2csMCk7CiAgICAgICAgZW1heC5yZXNpemUobWF4bG9nLDApOwogICAgICAgIGVtaW4ucmVzaXplKG1heGxvZywwKTsKICAgICAgICBkZXB0aD0wOwogICAgfQp9OwoKI2RlZmluZSBhbmNlcyh1LGkpIGluZm9yWyh1KV0ucGFyW2ldCiNkZWZpbmUgZW1heCh1LGkpIGluZm9yWyh1KV0uZW1heFtpXQojZGVmaW5lIGVtaW4odSxpKSBpbmZvclsodSldLmVtaW5baV0KI2RlZmluZSBwYXIodSkgaW5mb3JbKHUpXS5wYXJbMF0KI2RlZmluZSBkZXB0aCh1KSBpbmZvclsodSldLmRlcHRoCgp2ZWN0b3I8bm9kZVRyZWU+IGluZm9yOwoKdm9pZCBkZnMoY29uc3QgaW50ICZ1LGNvbnN0IGludCAmcGFyZW50LGNvbnN0IGludCAmZGVwdGgsY29uc3QgaW50ICZ3ZWkpCnsKICAgIHBhcih1KT1wYXJlbnQ7CiAgICBlbWF4KHUsMCk9d2VpOwogICAgZW1pbih1LDApPXdlaTsKICAgIGRlcHRoKHUpPWRlcHRoOwogICAgZm9yKGNvbnN0IG5laWdoICZuZWk6IGFkalt1XSkKICAgICAgICBpZihuZWkudmVyIT1wYXIodSkpCiAgICAgICAgICAgIGRmcyhuZWkudmVyLHUsZGVwdGgrMSxuZWkud2VpKTsKfQp2b2lkIGRwbGNhKGNvbnN0IGludCAmTikKewogICAgLy8vZHA6CiAgICBmb3IoaW50IGo9MTsxPDxqPE47aisrKQogICAgICAgIGZvcihpbnQgaT0xO2k8PU47aSsrKQogICAgICAgIHsKICAgICAgICAgICAgYW5jZXMoaSxqKT1hbmNlcyhhbmNlcyhpLGotMSksai0xKTsKICAgICAgICAgICAgZW1pbihpLGopPW1pbihlbWluKGksai0xKSxlbWluKGFuY2VzKGksai0xKSxqLTEpKTsKICAgICAgICAgICAgZW1heChpLGopPW1heChlbWF4KGksai0xKSxlbWF4KGFuY2VzKGksai0xKSxqLTEpKTsKICAgICAgICB9Cn0Kc3RydWN0IHF1ZXJ5eyBpbnQgbGNhbmMsZW1pLGVtYTsgfTsKcXVlcnkgbGNhKGludCB1LGludCB2KQp7CiAgICBpbnQgZW1hPS1vbyxlbWk9K29vOwogICAgaWYoZGVwdGgodSk8ZGVwdGgodikpIHN3YXAodSx2KTsKCiAgICB3aGlsZShkZXB0aCh1KT5kZXB0aCh2KSkKICAgIHsKICAgICAgICBlbWk9bWluKGVtaSxlbWluKHUsKGludClsb2cyKGRlcHRoKHUpLWRlcHRoKHYpKSkpOwogICAgICAgIGVtYT1tYXgoZW1hLGVtYXgodSwoaW50KWxvZzIoZGVwdGgodSktZGVwdGgodikpKSk7CiAgICAgICAgdT1hbmNlcyh1LChpbnQpbG9nMihkZXB0aCh1KS1kZXB0aCh2KSkpOwogICAgfQogICAgaW50IGxvZz1sb2cyKGRlcHRoKHUpKTsKICAgIHdoaWxlKHUhPXYpCiAgICB7CiAgICAgICAgd2hpbGUoYW5jZXModSxsb2cpPT1hbmNlcyh2LGxvZykgJiYgbG9nKSAtLWxvZzsKICAgICAgICBlbWk9bWluKGVtaSxlbWluKHUsbG9nKSk7CiAgICAgICAgZW1hPW1heChlbWEsZW1heCh1LGxvZykpOwogICAgICAgIGVtaT1taW4oZW1pLGVtaW4odixsb2cpKTsKICAgICAgICBlbWE9bWF4KGVtYSxlbWF4KHYsbG9nKSk7CiAgICAgICAgdT1hbmNlcyh1LGxvZyksdj1hbmNlcyh2LGxvZyk7CiAgICB9CiAgICByZXR1cm4ge3UsZW1pLGVtYX07Cn0KaW50IG1haW4oKQp7CiAgICAjaWZkZWYgZG1kZAogICAgZnJlb3Blbih0YWciLmlucCIsInIiLHN0ZGluKTsgZnJlb3Blbih0YWciLm91dCIsInciLHN0ZG91dCk7CiAgICAjZW5kaWYgLy8gZG1kZAogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBjaW4+Pm47CgogICAgYWRqLnJlc2l6ZShuKzEpOwogICAgaW50IHgseSx6OwogICAgZm9yKGludCBpPTE7aTxuO2krKykKICAgICAgICBjaW4+Png+Pnk+PnosYWRqW3hdLnB1c2hfYmFjayh7eSx6fSksYWRqW3ldLnB1c2hfYmFjayh7eCx6fSk7CgogICAgaW5mb3IucmVzaXplKG4rMSk7CiAgICBmb3IoaW50IGk9MDtpPD1uO2krKykgaW5mb3JbaV0ucmVzZXQoKTsKCiAgICBkZnMoMSwwLDEsMCk7CiAgICBkcGxjYShuKTsKCiAgICBjaW4+Pm07CiAgICBxdWVyeSByZXM7CiAgICB3aGlsZShtLS0+MCkKICAgIHsKICAgICAgICBjaW4+Png+Pnk7CiAgICAgICAgcmVzPWxjYSh4LHkpOwogICAgICAgIGNvdXQ8PHJlcy5lbWk8PCIgIjw8cmVzLmVtYTw8IlxuIjsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=