#include<bits/stdc++.h> #define MAXN 100005 usingnamespace std; inlineintread(){ int x=0,f=1; char ch=getchar(); while (ch<'0'||ch>'9'){ if (ch=='-') f=-1; ch=getchar(); } while (ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^'0'); ch=getchar(); } return x*f; } structEdge{ int to,len; }; vector<Edge>G[MAXN]; inlinevoidAddEdge(int u,int v,int w){ G[u].push_back(Edge{v,w}); } int dis[MAXN]; voiddfs(int u,int father){ for (registerint i=0;i<G[u].size();++i){ int v=G[u][i].to,w=G[u][i].len; if (v!=father){ dis[v]=dis[u]^w; dfs(v,u); } } } intmain(){ int n=read(); for (registerint i=1;i<n;++i){ int u=read(),v=read(),w=read(); AddEdge(u,v,w); AddEdge(v,u,w); } dfs(1,1); int m=read(); while (m--){ int u=read(),v=read(); printf("%d\n",dis[u]^dis[v]); } }