#include #include #include #include using namespace std; typedef int var; #define DIM 100000 char buff[DIM]; var poz; void Read(var &a) { a = 0; while(!isdigit(buff[poz])) if(++poz == DIM) cin.read(buff, DIM), poz=0; while(isdigit(buff[poz])) { a = a * 10 + buff[poz] - '0'; if(++poz == DIM) cin.read(buff, DIM), poz=0; } } #define MAXN 100005 vector G[MAXN]; var Parent[MAXN]; void dfs(var node) { for(auto vec : G[node]) { if(!Parent[vec]) { Parent[vec] = node; dfs(vec); } } } void makeRoot(var node) { if(Parent[node]) { makeRoot(Parent[node]); Parent[Parent[node]] = node; } } var ST[MAXN], e; bool Viz[MAXN]; var getLca(var a, var b) { while(e) Viz[ST[--e]] = 0; while(true) { if(Viz[a]) return a; if(a) Viz[a] = 1, ST[e++] = a, a = Parent[a]; if(Viz[b]) return b; if(b) Viz[b] = 1, ST[e++] = b, b = Parent[b]; } } var Solve(var a, var b) { var lca = getLca(a, b); if(lca == a || lca == b) return -1; return lca; } int main() { //freopen("debug.in", "r", stdin); //freopen("debug.out", "w", stdout); cin.read(buff, DIM); var n, m, x, y, a, b, type; Read(n); Read(m); for(var i=1; i