#include #include #include using namespace std; int op(int a,int b){return a^b;} int e(){return 0;} #include struct euler_tour{ vector >G; vectorV; vector >range; euler_tour(int N_=0):G(N_),range(N_),V(){} void add_edge(int u,int v) { G[u].push_back(v); G[v].push_back(u); } void build(int root=0){dfs(root,-1);} void dfs(int u,int p) { range[u].first=V.size(); V.push_back(u); for(int v:G[u])if(v!=p)dfs(v,u); range[u].second=V.size(); } size_t size()const{return V.size();} int operator[](int k)const{return V[k];} const pair&subtree(int v)const{return range[v];} }; int C[1<<17]; main() { int N,Qc; cin>>N>>Qc; for(int i=0;i>C[i]; euler_tour P(N); for(int i=1;i>a>>b; a--,b--; P.add_edge(a,b); } P.build(); vectorinit(N); for(int i=0;iQ(init); for(int i=0;i>t>>x>>y; if(t==1) { x--; int id=P.subtree(x).first; Q.set(id,Q.get(id)^y); } else { x--; pairp=P.subtree(x); cout<