#include #include using namespace std; void dfs(int v, vector>& graph, vector& colors, vector& component) { colors[v] = 1; for (int& dest : graph[v]) { if (colors[dest] == 0) { dfs(dest, graph, colors, component); } } colors[v] = 2; component.push_back(v + 1); } int main() { int n, m; cin >> n >> m; vector> graph0(m); for (auto& [f, s] : graph0) { cin >> f >> s; f--; s--; } vector> graph(n); for (auto& [f, s] : graph0) { graph[f].push_back(s); graph[s].push_back(f); } vector colors(n); vector> components; for (int i = 0; i < n; i++) { if (colors[i] == 0) { vector component; dfs(i, graph, colors, component); components.emplace_back(component); } } cout << components.size() << '\n'; for (auto& component : components) { cout << component.size() << '\n'; for (auto& item : component) { cout << item << ' '; } cout << '\n'; } return 0; }