Pagini recente » Cod sursa (job #1167916) | Cod sursa (job #897326) | Cod sursa (job #348693) | Cod sursa (job #52874) | Cod sursa (job #2720651)
#include <bits/stdc++.h>
#define edge pair<int, int>
#define nod first
#define nr second
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n, m, x, y;
bool eliminat[500005];
vector<int> rez;
vector<edge> graf[100005];
void Read()
{
f>>n>>m;
for(int i = 1;i <= m;++i)
f>>x>>y, graf[x].push_back({y, i}), graf[y].push_back({x, i});
}
bool ok()
{
for(int i = 1;i <= n;++i)
if(graf[i].size() % 2)
return false;
return true;
}
void Solve()
{
if(!ok()) {g<<-1<<'\n'; return;}
stack<int> v;
v.push(1);
while(!v.empty())
{
int nod = v.top();
if(!graf[nod].empty())
{
edge muchie = graf[nod].back();
graf[nod].pop_back();
if(!eliminat[muchie.nr])
{
eliminat[muchie.nr] = true;
v.push(muchie.nod);
}
}
else
{
v.pop();
rez.push_back(nod);
}
}
for(auto it : rez)
g<<it<<" ";
}
int main()
{
Read();
Solve();
return 0;
}