#include <bits/stdc++.h>
#define pb push_back
#define pii pair <int, int>
#define mp make_pair
#define F first
#define S second
#define ll long long
#define iosbase ios_base::sync_with_stdio(false)
#define sc scanf
#define pr printf
#define null NULL
#define getcx getchar_unlocked
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define pll pair<ll,ll>
#define vi vector <int>
#define vll vector <ll>
#define maxs 200005
#define logmaxs 35
#define MOD 1000000007
#define eps 1e-9
#define llmax 1e15+5
#define intmax 1e9+5
#define intmin -intmax
#define pi 3.14159265358979
using namespace std;
int x[maxs], y[maxs], z[maxs];
vector <pii> gr[maxs];
int vis[maxs];
int xr[maxs];
int dpth[maxs];
int cnt;
int l[maxs], r[maxs];
void dfs(int src, int p){
vis[src]=1;
cnt++;
xr[cnt]=p;
l[src]=cnt;
for(int i=0; i<gr[src].size(); i++){
if(!vis[gr[src][i].F]){
dpth[gr[src][i].F]=dpth[src]+1;
dfs(gr[src][i].F, p^gr[src][i].S);
}
}
r[src]=cnt;
}
int tree[4*maxs], lazy[4*maxs];
int getmid(int a, int b){
return (a+b)/2;
}
int merge(int a, int b){
return a^b;
}
void init(int a, int b, int idx){
if(a>b){
return ;
}
if(a==b){
tree[idx]=xr[a];
//cout<<xr[a]<<" "<<a<<endl;
return ;
}
int mid=getmid(a, b);
init(a, mid, 2*idx);
init(mid+1, b, 2*idx+1);
tree[idx]=merge(tree[2*idx], tree[2*idx+1]);
}
void update(int node,int a,int b,int i,int j,int val){
if(lazy[node]!=0){
tree[node]^=lazy[node];
if(a!=b){
lazy[node*2]^=lazy[node];
lazy[node*2+1]^=lazy[node];
}
lazy[node]=0;
}
if(a>b || a>j || b<i){
return ;
}
if(a>=i && b<=j){
tree[node]^=val;
if(a!=b){
lazy[node*2]^=val;
lazy[node*2+1]^=val;
}
return ;
}
update(node*2,a,(a+b)/2,i,j,val);
update(node*2+1,(a+b)/2+1,b,i,j,val);
tree[node]=tree[node*2]^tree[node*2+1];
}
int query(int node,int a,int b,int i,int j){
if(a>b || a>j || b<i){
return 0;
}
if(lazy[node]!=0){
tree[node]^=lazy[node];
if(a!=b){
lazy[node*2]^=lazy[node];
lazy[node*2+1]^=lazy[node];
}
lazy[node]=0;
}
if(a>=i && b<=j){
return tree[node];
}
int q1=query(node*2,a,(a+b)/2,i,j);
int q2=query(node*2+1,(a+b)/2+1,b,i,j);
return (q1^q2);
}
int main(){
int n;
sc("%d", &n);
for(int i=1; i<=n-1; i++){
sc("%d %d %d", &x[i], &y[i], &z[i]);
gr[x[i]].pb(mp(y[i],z[i]));
gr[y[i]].pb(mp(x[i],z[i]));
}
dfs(1, 0);
init(1, n, 1);
int q;
sc("%d", &q);
int t;
int x1,y1;
while(q--){
sc("%d %d %d", &t, &x1, &y1);
if(t==1){
int zz;
int u1=x[x1];
int u2=y[x1];
if(dpth[u1]<dpth[u2])
zz=u2;
else zz=u1;
update(1, 1, n, l[zz], r[zz], y1^z[x1]);
z[x1]=y1;
}
else{
pr("%d\n", query(1, 1, n, l[x1], l[x1])^query(1, 1, n, l[y1], l[y1]));
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcGlpIHBhaXIgPGludCwgaW50PgojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGlvc2Jhc2UgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSkKI2RlZmluZSBzYyBzY2FuZgojZGVmaW5lIHByIHByaW50ZgojZGVmaW5lIG51bGwgTlVMTAojZGVmaW5lIGdldGN4IGdldGNoYXJfdW5sb2NrZWQKI2RlZmluZSBsYiBsb3dlcl9ib3VuZAojZGVmaW5lIHViIHVwcGVyX2JvdW5kCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIHBsbCBwYWlyPGxsLGxsPgojZGVmaW5lIHZpIHZlY3RvciA8aW50PgojZGVmaW5lIHZsbCB2ZWN0b3IgPGxsPgogCiNkZWZpbmUgbWF4cyAyMDAwMDUKI2RlZmluZSBsb2dtYXhzIDM1CiAKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwojZGVmaW5lIGVwcyAxZS05CiNkZWZpbmUgbGxtYXggMWUxNSs1CiNkZWZpbmUgaW50bWF4IDFlOSs1CiNkZWZpbmUgaW50bWluIC1pbnRtYXgKIAojZGVmaW5lIHBpIDMuMTQxNTkyNjUzNTg5NzkKIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IHhbbWF4c10sIHlbbWF4c10sIHpbbWF4c107CnZlY3RvciA8cGlpPiBnclttYXhzXTsKaW50IHZpc1ttYXhzXTsKaW50IHhyW21heHNdOwppbnQgZHB0aFttYXhzXTsKaW50IGNudDsKaW50IGxbbWF4c10sIHJbbWF4c107Cgp2b2lkIGRmcyhpbnQgc3JjLCBpbnQgcCl7Cgl2aXNbc3JjXT0xOwoJY250Kys7Cgl4cltjbnRdPXA7CglsW3NyY109Y250OwoJZm9yKGludCBpPTA7IGk8Z3Jbc3JjXS5zaXplKCk7IGkrKyl7CgkJaWYoIXZpc1tncltzcmNdW2ldLkZdKXsKCQkJZHB0aFtncltzcmNdW2ldLkZdPWRwdGhbc3JjXSsxOwoJCQlkZnMoZ3Jbc3JjXVtpXS5GLCBwXmdyW3NyY11baV0uUyk7CgkJfQoJfQoJcltzcmNdPWNudDsKfQoKaW50IHRyZWVbNCptYXhzXSwgbGF6eVs0Km1heHNdOwoKaW50IGdldG1pZChpbnQgYSwgaW50IGIpewoJcmV0dXJuIChhK2IpLzI7Cn0KCmludCBtZXJnZShpbnQgYSwgaW50IGIpewoJcmV0dXJuIGFeYjsKfQoKdm9pZCBpbml0KGludCBhLCBpbnQgYiwgaW50IGlkeCl7CglpZihhPmIpewoJCXJldHVybiA7Cgl9CglpZihhPT1iKXsKCQl0cmVlW2lkeF09eHJbYV07CgkJLy9jb3V0PDx4clthXTw8IiAiPDxhPDxlbmRsOwoJCXJldHVybiA7Cgl9CglpbnQgbWlkPWdldG1pZChhLCBiKTsKCWluaXQoYSwgbWlkLCAyKmlkeCk7Cglpbml0KG1pZCsxLCBiLCAyKmlkeCsxKTsKCXRyZWVbaWR4XT1tZXJnZSh0cmVlWzIqaWR4XSwgdHJlZVsyKmlkeCsxXSk7Cn0KCnZvaWQgdXBkYXRlKGludCBub2RlLGludCBhLGludCBiLGludCBpLGludCBqLGludCB2YWwpewoJaWYobGF6eVtub2RlXSE9MCl7CgkJdHJlZVtub2RlXV49bGF6eVtub2RlXTsKCQlpZihhIT1iKXsKCQkJbGF6eVtub2RlKjJdXj1sYXp5W25vZGVdOwoJCQlsYXp5W25vZGUqMisxXV49bGF6eVtub2RlXTsKCQl9CgkJbGF6eVtub2RlXT0wOwoJfQoJaWYoYT5iIHx8IGE+aiB8fCBiPGkpewoJCXJldHVybiA7Cgl9CglpZihhPj1pICYmIGI8PWopewoJCXRyZWVbbm9kZV1ePXZhbDsKCQlpZihhIT1iKXsKCQkJbGF6eVtub2RlKjJdXj12YWw7CgkJCWxhenlbbm9kZSoyKzFdXj12YWw7CgkJfQoJCXJldHVybiA7Cgl9Cgl1cGRhdGUobm9kZSoyLGEsKGErYikvMixpLGosdmFsKTsKCXVwZGF0ZShub2RlKjIrMSwoYStiKS8yKzEsYixpLGosdmFsKTsKCXRyZWVbbm9kZV09dHJlZVtub2RlKjJdXnRyZWVbbm9kZSoyKzFdOwp9CgppbnQgcXVlcnkoaW50IG5vZGUsaW50IGEsaW50IGIsaW50IGksaW50IGopewoJaWYoYT5iIHx8IGE+aiB8fCBiPGkpewoJCXJldHVybiAwOwoJfQoJaWYobGF6eVtub2RlXSE9MCl7CgkJdHJlZVtub2RlXV49bGF6eVtub2RlXTsKCQlpZihhIT1iKXsKCQkJbGF6eVtub2RlKjJdXj1sYXp5W25vZGVdOwoJCQlsYXp5W25vZGUqMisxXV49bGF6eVtub2RlXTsKCQl9CgkJbGF6eVtub2RlXT0wOwoJfQoJaWYoYT49aSAmJiBiPD1qKXsKCQlyZXR1cm4gdHJlZVtub2RlXTsKCX0KCWludCBxMT1xdWVyeShub2RlKjIsYSwoYStiKS8yLGksaik7CglpbnQgcTI9cXVlcnkobm9kZSoyKzEsKGErYikvMisxLGIsaSxqKTsKCXJldHVybiAocTFecTIpOwp9CmludCBtYWluKCl7CglpbnQgbjsKCXNjKCIlZCIsICZuKTsKCWZvcihpbnQgaT0xOyBpPD1uLTE7IGkrKyl7CgkJc2MoIiVkICVkICVkIiwgJnhbaV0sICZ5W2ldLCAmeltpXSk7CgkJZ3JbeFtpXV0ucGIobXAoeVtpXSx6W2ldKSk7CgkJZ3JbeVtpXV0ucGIobXAoeFtpXSx6W2ldKSk7Cgl9CglkZnMoMSwgMCk7Cglpbml0KDEsIG4sIDEpOwoJaW50IHE7CglzYygiJWQiLCAmcSk7CglpbnQgdDsKCWludCB4MSx5MTsKCXdoaWxlKHEtLSl7CgkJc2MoIiVkICVkICVkIiwgJnQsICZ4MSwgJnkxKTsKCQlpZih0PT0xKXsKCQkJaW50IHp6OwoJCQlpbnQgdTE9eFt4MV07CgkJCWludCB1Mj15W3gxXTsKCQkJaWYoZHB0aFt1MV08ZHB0aFt1Ml0pCgkJCQl6ej11MjsKCQkJZWxzZSB6ej11MTsKCQkJdXBkYXRlKDEsIDEsIG4sIGxbenpdLCByW3p6XSwgeTFeelt4MV0pOwoJCQl6W3gxXT15MTsKCQl9CgkJZWxzZXsKCQkJcHIoIiVkXG4iLCBxdWVyeSgxLCAxLCBuLCBsW3gxXSwgbFt4MV0pXnF1ZXJ5KDEsIDEsIG4sIGxbeTFdLCBsW3kxXSkpOwoJCX0KCX0KCXJldHVybiAwOwp9