#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, m, i, j, k, t, u, hi, lo, md;
cin >> n >> m;
vector<int> p(n, 0), o = {0}, d(n);
vector<vector<pair<int, bool> > > v(n);
for (k = 0; k < m; k++)
{
cin >> i >> j;
i--;
j--;
v[i].push_back({j, 0});
v[j].push_back({i, 0});
}
for (k = 0; k < n; k++)
{
d[k] = v[k].size();
sort(v[k].begin(), v[k].end());
}
t = 0;
for (k = 1; k < m; k++)
{
for (; p[t] < v[t].size(); p[t]++)
{
if (v[t][p[t]].second)
continue;
u = v[t][p[t]].first;
if (k < m - 1 && d[u] == 1)
continue;
hi = v[u].size();
lo = -1;
while (hi - lo > 1)
{
md = (hi + lo) >> 1;
if (v[u][md].first > t)
hi = md;
else
lo = md;
}
v[u][lo].second = v[t][p[t]].second = 1;
d[t]--;
d[u]--;
t = u;
o.push_back(t);
break;
}
}
o.push_back(0);
vector<bool> w(n, 0);
vector<int> pr(m + 1);
for (i = 0; i <= m; i++)
pr[i] = i - 1;
for (i = 0; i <= m; i++)
{
if (w[o[i]])
{
cout << o[i] + 1;
for (j = i - 1; j >= 0 && o[j] != o[i]; j = pr[j])
{
w[o[j]] = 0;
cout << ' ' << o[j] + 1;
}
pr[i] = pr[j];
cout << '\n';
}
else
w[o[i]] = 1;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |