#include #include #include #define NMAX 100005 #define lsb(x) ((x)&(-x)) using namespace std; int n,poz1; int first[NMAX]; int last[NMAX]; vector graf[NMAX]; int father[NMAX],poz2,hul; int euler[2*NMAX]; int unde[NMAX]; int h[2*NMAX]; void dfs(int nod){ euler[++poz2]=nod; unde[nod]=poz2; h[poz2]=++hul; first[nod]=++poz1; for(vector::iterator it=graf[nod].begin();it!=graf[nod].end();it++) if(*it!=father[nod]){ father[*it]=nod; dfs(*it); euler[++poz2]=nod; h[poz2]=hul; } last[nod]=++poz1; --hul; } int logar[2*NMAX]; int din[19][2*NMAX]; void precalc_rmq(){ logar[2]=1; for(int i=3;i<2*NMAX;i++) logar[i]=1+logar[i/2]; int i,j; for(i=1;i<=poz2;i++) din[0][i]=i; for(i=1;(1<b) swap(a,b); int y=logar[b-a+1]; if(h[din[y][a]]>n>>m; int x,y; for(int i=1;i>x>>y; graf[x].push_back(y); graf[y].push_back(x); } dfs(1); precalc_rmq(); int type; int _rad; while(m--) { cin>>type; if(type==1) { cin>>x; _rad=x; } else { cin>>x>>y; if(dist(x,_rad)+dist(_rad,y)==dist(x,y)) { cout<<_rad<