Pagini recente » Cod sursa (job #964906) | Cod sursa (job #1744294) | Cod sursa (job #1267470) | Cod sursa (job #112691) | Cod sursa (job #2374884)
#include <bits/stdc++.h>
using namespace std;
const int N = 100001;
const int M = 500001;
vector <pair <int, int > >v[N];
int degree[N], ans[N], edge[M], s[M], k, nr;
char seen[N];
void euler(int node)
{
s[++k] = node;
if (seen[node])
while (degree[s[k]] == 0 && k != 0)
ans[++nr] = s[k--];
else
seen[node] = 1;
if (k > 0)
for (int i = 0; i < v[node].size(); i++)
{
int x = v[node][i].first; //node
int y = v[node][i].second; //edge
if (edge[y] == 0)
{
edge[y] = 1;
degree[node]--;
degree[x]--;
euler(x);
}
}
}
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
int n, m, i, a, b;
scanf("%d%d", &n, &m);
for (i = 1; i <= m; ++i)
{
scanf("%d%d", &a, &b);
degree[a]++;
degree[b]++;
v[a].push_back({b, i});
v[b].push_back({a, i});
}
for (i = 1; i <= n; i++)
{
if (degree[i] % 2 == 1)
{
printf("-1");
return 0;
}
}
euler(1);
for (i = 1; i <= nr; i++)
printf("%d ", ans[i]);
return 0;
}