Pagini recente » Cod sursa (job #1864707) | Cod sursa (job #2681297) | Cod sursa (job #1815948) | Cod sursa (job #3349190) | Cod sursa (job #1815746)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <stack>
#define NMAX 100005
#define MMAX 500005
using namespace std;
int N,M,grad[NMAX];
vector<int> graf[NMAX];
vector<int> ciclu;
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);
grad[v[i].nod1]++;
grad[v[i].nod2]++;
graf[v[i].nod1].push_back(i);
graf[v[i].nod2].push_back(i);
}
for(int i=1;i<=M;i++)
{
if(grad[i]%2==1)
{
cout<<-1;
exit(0);
}
}
}
stack<int> q;
void rezolvare()
{
q.push(1);
while(!q.empty())
{
int c = q.top();
if(graf[c].size() && v[graf[c].back()].used == 1)
{
graf[c].pop_back();
}
else if(graf[c].size())
{
int x,i=graf[c].back();
if(v[i].nod1==c)
x = v[i].nod2;
else
x = v[i].nod1;
graf[c].pop_back();
v[i].used = 1;
q.push(x);
}
else
{
ciclu.push_back(c);
q.pop();
}
}
}
void afisare()
{
for(vector<int>::iterator ii = ciclu.begin(); ii!= ciclu.end(); ii++)
{
printf("%d ",*ii);
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
rezolvare();
afisare();
return 0;
}