Pagini recente » Cod sursa (job #2628802) | Cod sursa (job #2238116) | Cod sursa (job #328667) | Cod sursa (job #1780017) | Cod sursa (job #2384682)
#include <bits/stdc++.h>
#define DMAX 100100
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
void citire();
struct ele{int y,muc;};
vector <ele> a[DMAX];
vector<int> sol;
int grad[DMAX];
void euler(int poz);
void dfs(int x);
int prim,n,m;
bool da[DMAX];
bool muchie[500100];
void euler(int poz);
int main()
{int i;
citire();
euler(prim);
for(i=0;i<sol.size()-1;i++)
fout<<sol[i]<<' ';
}
void citire()
{int i,x,y,j;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y;
a[x].push_back({y,i});
a[y].push_back({x,i});
}
j=1;
while(!a[j].size())da[j++]=1;
dfs(j);
for(i=1;i<=n;i++)
if((!da[i]&&a[i].size())||(a[i].size()%2))
{fout<<-1;exit(0);}
prim=j;
}
void euler(int poz)
{ele x;
while(a[poz].size())
{
x=a[poz].back();
a[poz].pop_back();
if(!muchie[x.muc])
{muchie[x.muc]=1;euler(x.y);}
}
sol.push_back(poz);
}
void dfs(int x)
{int i;
da[x]=1;
for(i=0;i<a[x].size();i++)
if(!da[a[x][i].y])
dfs(a[x][i].y);
}