Pagini recente » Cod sursa (job #225367) | Cod sursa (job #944357) | Cod sursa (job #1934506) | Cod sursa (job #2289173) | Cod sursa (job #902978)
Cod sursa(job #902978)
#include<stdio.h>
#include<list>
#include<stack>
using namespace std;
#define nmax 100005
long n, m, i, a, b, ac, urm, sf, nod, nraf;
long gr[nmax];
bool viz[nmax], ok;
list <long> ma[nmax];
list <long> ::iterator it;
stack <long> st;
void citire()
{
scanf("%ld %ld",&n,&m);
for (i=1; i<=m; i++)
{
scanf("%ld %ld",&a,&b);
ma[a].push_back(b);
gr[a]++;
ma[b].push_back(a);
gr[b]++;
}
}
void dfs(long nod)
{
list <long> ::iterator it;
viz[nod]=1;
for (it=ma[nod].begin(); it!=ma[nod].end(); it++)
if (!viz[*it])
dfs(*it);
}
void verificare()
{
ok=1;
for (i=1; i<=n; i++)
ok=ok&&(viz[i])&&(gr[i]%2==0);
}
void eliminare_muchie()
{
ma[ac].erase(ma[ac].begin());
for (it=ma[urm].begin(); it!=ma[urm].end(); it++)
if (*it==ac)
{
ma[urm].erase(it);
break;
}
}
void extinde()
{
ac=nod;
while (1)
{
st.push(ac);
if (ma[ac].size()==0)
break;
urm=*ma[ac].begin();
eliminare_muchie();
ac=urm;
}
}
void rezolvare()
{
st.push(1);
while (st.size())
{
nod=st.top();
st.pop();
if (ma[nod].size())
extinde();
else
{
nraf++;
if (nraf<=m)
printf("%ld ",nod);
else
break;
}
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
dfs(1);
verificare();
if (!ok)
printf("-1\n");
else
rezolvare();
return 0;
}