rt
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e5 + 10;
const int M = 4e6 + 10;
vector <int> p[N];
int dfn[N], low[N], st[M], top, cnt, idx;
int u[N], v[N];
int n, m, ans, deg[N];
vector <int> IDX[N];
void dfs(int x, int fa)
{
int son = 0;
dfn[x] = low[x] = ++ cnt;
st[++ top] = x;
for(auto v : p[x])
{
if(v == fa) continue;
if(!dfn[v])
{
son ++;
dfs(v, x);
low[x] = min(low[x], low[v]);
if(low[v] >= dfn[x])
{
deg[x] ++;
int V = 0;
idx ++;
while(st[top + 1] != v) IDX[idx].push_back(st[top --]);
IDX[idx].push_back(x);
}
}
else low[x] = min(low[x], dfn[v]);
}
if(fa == 0 && son == 0) IDX[++ idx].push_back(x);
}
signed main()
{
cin >> n >> m;
for(int i = 1;i <= m;i ++)
{
cin >> u[i] >> v[i];
p[u[i]].push_back(v[i]);
p[v[i]].push_back(u[i]);
}
for(int i = 1;i <= n;i ++)
if(!dfn[i]) dfs(i, 0), top = 0;
cout << idx << '\n';
for(int i = 1;i <= idx;i ++)
{
cout << IDX[i].size() << ' ';
for(int j = 0;j < IDX[i].size();j ++) cout << IDX[i][j] << ' ';
cout << '\n';
}
return 0;
}
Subtask #4全WA