#include <iostream> #include <cstring> using namespace std; #define N 100000 int boss[N]; char vizit[N]; int ceo; int n,m; void afisare(){ for(int i = 1 ; i <= n ;i++){ cout<<boss[i]<<" "; } cout<<"\n"; } int common_boss(int a,int b){ int common_boss = -1; int current = a; while(current != -1){ vizit[current] = 1; current = boss[current]; // b bosul lui a if (current == b) return -1; } current = b; int current_boss; while(current != -1){ current_boss = boss[current]; // a bosul lui b if (current_boss == a) return -1; if (vizit[current_boss] ){ common_boss = current_boss; break; } current = boss[current]; } memset (vizit,0,n+1); return common_boss; } void change_ceo(int new_ceo){ int current = new_ceo; int tmp = -1; int old = -1; while(current != -1){ tmp = current; // current = boss[current] ; boss[tmp] = old; old = tmp; } boss[new_ceo ] = -1; } int main(){ ceo = 1; int a,b; int boss_crt; int slave ; cin>>n>>m; boss[ceo] = -1; for (int i = 0 ; i < n -1; i++){ cin>>a>>b; boss_crt = a; slave = b; if (a > b ) { boss_crt = b; slave = a; } boss[slave] = boss_crt; } int type ; int new_boss; for (int i = 0 ; i < m ; i++){ cin>>type; if (type == 1){ cin>>new_boss; change_ceo(new_boss); } if (type == 2){ cin>>a>>b; int comm = common_boss(a,b); cout<<comm<<"\n"; } } return 0; }