Pagini recente » Cod sursa (job #465646) | Cod sursa (job #2208227) | Cod sursa (job #309926) | Cod sursa (job #174063) | Cod sursa (job #2082081)
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
int vizMuchii[500005],N,M;
vector <pair<int,int> > G[100005];
vector <int> sol;
stack <int> fii;
void citire()
{
int aux1,aux2;
scanf("%d%d",&N,&M);
for(int i=1; i<=M; i++)
{
scanf("%d%d",&aux1,&aux2);
G[aux1].push_back(make_pair(aux2,i));
G[aux2].push_back(make_pair(aux1,i));
}
}
bool euler()
{
for(int i=1; i<=N; i++)
if(G[i].size()%2)
return false;
return true;
}
void ciclu(int startNod)
{
int nrMuchie,fiu,nodCurent;
fii.push(startNod);
while(!fii.empty())
{
nodCurent=fii.top();
if(!G[nodCurent].empty())
{
nrMuchie=G[nodCurent].back().second;
fiu=G[nodCurent].back().first;
G[nodCurent].pop_back();
if(!vizMuchii[nrMuchie])
{
fii.push(fiu);
vizMuchii[nrMuchie]=1;
}
}
else
{
fii.pop();
sol.push_back(nodCurent);
}
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
if(euler())
{
ciclu(1);
for(int i=0; i<sol.size(); i++)
printf("%d ",sol[i]);
}
else
printf("-1");
return 0;
}