Pagini recente » Cod sursa (job #3291060) | Cod sursa (job #732062) | Cod sursa (job #2033571) | Cod sursa (job #2848795) | Cod sursa (job #2323185)
#include <iostream>
#include <cstdio>
#include <vector>
#include <unordered_set>
#include <stack>
#define NMAX 100010
using namespace std;
int n, m, sterse;
int nodviz[NMAX];
vector<int> sol;
stack<int> st;
//vector<int> v[NMAX];
unordered_multiset<int> v[NMAX];
void citire()
{
scanf("%d %d", &n, &m);
int t1, t2;
for (int i = 1; i <= m; i++)
{
scanf("%d %d", &t1, &t2);
v[t1].insert(t2);
v[t2].insert(t1);
}
}
void euler()
{
for (int i = 1; i <= n; i++)
if (v[i].size()%2)
{
printf("-1");
return;
}
st.push(1);
while (!st.empty())
{
int top = st.top();
if (v[top].size() == 0)
{
sol.push_back(top);
nodviz[top]++;
st.pop();
continue;
}
int next = *v[top].begin();
v[top].erase(v[top].begin());
sterse++;
v[next].erase(v[next].find(top));
st.push(next);
}
for (int i = 1; i <= n; i++)
if (nodviz[i] == 0)
{
printf("-1");
return;
}
if (sterse != m)
{
printf("-1");
return ;
}
for (int i = sol.size()-1; i > 0; i--)
printf("%d ", sol[i]);
}
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
citire();
euler();
return 0;
}