Pagini recente » Cod sursa (job #339792) | Cod sursa (job #2942830) | Cod sursa (job #735952) | Cod sursa (job #1171944) | Cod sursa (job #1888349)
#include <iostream>
#include <vector>
#include <cstdio>
#include <stack>
#define NMAX 100005
#define MMAX 500005
using namespace std;
struct muchie
{
int nod1,nod2;
}muchii[MMAX];
int N,M;
vector<int> graf[NMAX];
void citire()
{
scanf("%d%d",&N,&M);
for(int i=1;i<=M;i++)
{
scanf("%d%d",&muchii[i].nod1,&muchii[i].nod2);
graf[muchii[i].nod1].push_back(i);
graf[muchii[i].nod2].push_back(i);
}
}
bool grade()
{
for(int i=1;i<=N;i++)
if(graf[i].size()%2==1)
return 0;
return 1;
}
stack<int> s;
int used[MMAX];
vector<int> rez;
void euler()
{
s.push(1);
while(!s.empty())
{
int nod_curent = s.top();
if(graf[nod_curent].size())
{
int muchie_noua = graf[nod_curent].back();
graf[nod_curent].pop_back();
if(used[muchie_noua])
continue;
if(muchii[muchie_noua].nod1 == nod_curent)
s.push(muchii[muchie_noua].nod2);
else
s.push(muchii[muchie_noua].nod1);
used[muchie_noua]=1;
}
else
{
rez.push_back(s.top());
s.pop();
}
}
}
void afisare()
{
for(vector<int>::iterator ii=rez.begin();ii!=rez.end()-1;ii++)
printf("%d ",*ii);
}
int main()
{
freopen("ciclueuler.in","r",stdin);
citire();
if(grade())
{
euler();
afisare();
}
else
printf("-1");
return 0;
}