void dfs(int now){ visited[now] = true; st.insert(now); for(int next:graph[now]) if(!visited[next]) dfs(next); } int dfs2(int now){ visited[now] = true; if(st.find(now) != st.end()) return now; for(int next: graph[now]) if(!visited[next]) return dfs2(next); } int solve(int a, int b){ st.clear(); memset(visited, false, sizeof(visited)); dfs(a); memset(visited, false, sizeof(visited)); return dfs2(b); }