Pagini recente » Cod sursa (job #2889014) | Cod sursa (job #1797812) | Cod sursa (job #1596068) | Cod sursa (job #2384042) | Cod sursa (job #2422483)
#include <bits/stdc++.h>
using namespace std;
int n, m;
struct Muchie
{
int a, b, used;
int other(int x)
{
return a == x ? b : a;
}
} mc[500010];
vector<int> g[100010];
int gr[100010];
int pad[100010];
int tata(int nod)
{
if(pad[nod] == nod)
return nod;
int t = tata(pad[nod]);
pad[nod] = t;
return t;
}
int main() {
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
cin >> n >> m;
for(int i = 1; i <= n; i++)
pad[i] = i;
for(int i = 0; i < m; i++)
{
int a, b;
cin >> a >> b;
mc[i].a = a;
mc[i].b = b;
mc[i].used = 0;
g[a].push_back(i);
g[b].push_back(i);
gr[a]++;
gr[b]++;
pad[tata(a)] = tata(b);
}
int tataMare = tata(1);
for(int i = 1; i <= n; i++)
{
if(tata(i) != tataMare || gr[i] % 2 != 0)
{
cout << -1;
return 0;
}
}
stack<int> st;
st.push(1);
vector<int> result;
while(!st.empty())
{
int nod = st.top();
while(!g[nod].empty())
{
if(mc[g[nod].back()].used)
{
g[nod].pop_back();
}
else break;
}
if(g[nod].empty())
{
result.push_back(nod);
st.pop();
}
else
{
mc[g[nod].back()].used = 1;
st.push(mc[g[nod].back()].other(nod));
g[nod].pop_back();
}
}
result.pop_back();
for(int nod : result)
cout << nod << " ";
return 0;
}