Pagini recente » Cod sursa (job #1400423) | Cod sursa (job #2599935) | Cod sursa (job #2375022) | Cod sursa (job #951080) | Cod sursa (job #1969574)
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
struct element
{
int y, indice;
} e1,e2;
int n,m,i,x,y,nod,k,nr,e[500005],start;
bool eulerian, viz[500005];
vector <element> v[100005];
stack <int> st;
element make_elem(int y, int indice)
{
element elem;
elem.y=y;
elem.indice=indice;
return elem;
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1; i<=m; i++)
{
scanf("%d%d",&x,&y);
e1=make_elem(y,i);
e2=make_elem(x,i);
v[x].push_back(e1);
v[y].push_back(e2);
start=x;
}
eulerian=true;
for (i=1; i<=n&&eulerian==true; i++)
if (v[i].size()%2==1) eulerian=false;
if (eulerian==false) printf("-1\n");
else
{
st.push(start);
while(st.size()>0)
{
nod=st.top();
if(v[nod].size()>0)
{
while(v[nod].size()>0 && viz[v[nod].back().indice]==1)
v[nod].pop_back();
if(v[nod].size()>0)
{
int y=v[nod].back().y;
int mc=v[nod].back().indice;
viz[mc]=1;
v[nod].pop_back();
st.push(y);
}
}
else{
e[++nr]=st.top();
st.pop();
}
}
if(nr-1!=m) printf("-1\n");
else for (i=1; i<=nr-1; i++)
printf("%d ",e[i]);
printf("\n");
}
return 0;
}