Pagini recente » Cod sursa (job #386761) | Cod sursa (job #2250726) | Cod sursa (job #1212872) | Cod sursa (job #2939938) | Cod sursa (job #2072138)
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
int n,m,i,x,y,start,nrmuchie,nod,e[500005],nrnod;
struct element
{
int y,nrmuchie;
} e1,e2;
bool viz[500005],eulerian;
vector <element> v[100005];
stack <int>st;
element make_elem(int y, int nrmuchie)
{
element elem;
elem.y=y;
elem.nrmuchie=nrmuchie;
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().nrmuchie]==1)
v[nod].pop_back();
if (v[nod].size()>0)
{
y=v[nod].back().y;
nrmuchie=v[nod].back().nrmuchie;
st.push(y);
viz[nrmuchie]=1;
}
}
else
{
e[++nrnod]=st.top();
st.pop();
}
}
if (nrnod-1!=m)
printf("-1\n");
else
for (i=1; i<=nrnod-1; i++) printf("%d ",e[i]);
}
return 0;
}