Pagini recente » Cod sursa (job #1103729) | Cod sursa (job #1207314) | Cod sursa (job #820972) | Cod sursa (job #1843971) | Cod sursa (job #1913969)
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
int n,m;
stack <int> adancime;
vector <int> Sol;
vector <pair<int,int> > G[100002];
int vViz[500002];
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 DFS()
{
int nod;
adancime.push(1);
int nrMuchie,fiu;
while(!adancime.empty())
{
nod=adancime.top();
if(!G[nod].empty())
{
nrMuchie=G[nod].back().second;
fiu=G[nod].back().first;
G[nod].pop_back();
if(!vViz[nrMuchie])
{
vViz[nrMuchie]=1;
adancime.push(fiu);
}
}
else
{
adancime.pop();
Sol.push_back(nod);
}
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdin);
citire();
if(euler())
{
DFS();
for(int i=0; i<=m-1; i++)
{
printf("%d ",Sol[i]);
}
}
else
printf("-1");
return 0;
}