Pagini recente » Cod sursa (job #1366199) | Cod sursa (job #1127493) | Cod sursa (job #2255250) | Cod sursa (job #1934670) | Cod sursa (job #1815970)
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#define NMAX 100005
#define MMAX 500005
using namespace std;
int N,M;
vector<int> graf[NMAX];
vector<int> rez;
stack<int> s;
struct muchie
{
int nod1,nod2;
bool used=0;
} v[MMAX];
void citire()
{
scanf("%d%d",&N,&M);
for(int i=1; i<=M; i++)
{
scanf("%d%d",&v[i].nod1,&v[i].nod2);
graf[v[i].nod1].push_back(i);
graf[v[i].nod2].push_back(i);
}
}
bool verificare_grad()
{
for(int i=1; i<=N; i++)
if(graf[i].size()%2==1)
{
cout<<-1;
return 1;
}
return 0;
}
void rezolvare()
{
s.push(1);
while(!s.empty())
{
int c = s.top();
if(graf[c].size())
{
int x,i=graf[c].back();
graf[c].pop_back();
if(v[i].used == 0)
{
v[i].used = 1;
if(c == v[i].nod1)
x = v[i].nod2;
else
x = v[i].nod1;
s.push(x);
}
}
else
{
rez.push_back(c);
s.pop();
}
}
}
void afisare()
{
for(vector<int>::iterator ii = rez.begin();ii!=rez.end();ii++)
printf("%d ",*ii);
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
if(verificare_grad())
return 0;
rezolvare();
afisare();
return 0;
}