std::vector<std::vector<int>> getCompGroups(const std::vector<std::vector<int>>& adj) {int n = adj.size();std::vector<char> vis(n, 0);std::vector<std::vector<int>> groups;for (int i = 0; i < n; ++i) {if (vis[i]) continue;groups.emplace_back();std::vector<int>& cur = groups.back();std::stack<int> st;st.push(i);vis[i] = 1;while (!st.empty()) {int u = st.top(); st.pop();cur.push_back(u);for (int v : adj[u]) {if (!vis[v]) {vis[v] = 1;st.push(v);}}}}return groups;
}