Pagini recente » Cod sursa (job #1708471) | Cod sursa (job #335213) | Cod sursa (job #2616660) | Cod sursa (job #191368) | Cod sursa (job #1279978)
#include <cstdio>
#include <vector>
#define nmax 100010
#define pb push_back
using namespace std;
vector<int> a[nmax], st;
int viz[nmax];
int n, m, i, x, y;
void dfs(int nod)
{
viz[nod]=1;
vector<int>::iterator it;
for(it=a[nod].begin(); it!=a[nod].end(); ++it)
if(!viz[*it]) dfs(*it);
}
int main()
{
freopen("ciclueuler.in", "rt", stdin);
freopen("ciclueuler.out", "wt", stdout);
scanf("%d%d", &n, &m);
for(i=1; i<=m; ++i)
{
scanf("%d%d", &x, &y);
a[x].pb(y);
a[y].pb(x);
}
for(i=1; i<=n; ++i)
if(a[i].size()&1)
{
printf("-1");
return 0;
}
dfs(1);
for(i=1; i<=n; ++i)
if(!viz[i])
{
printf("-1");
return 0;
}
st.pb(1);
while(st.size())
{
x=st.back();
if(a[x].size())
{
y=a[x].back();
a[x].pop_back();
for(vector<int>::iterator it=a[y].begin(); it!=a[y].end(); ++it)
if(*it==x)
{
*it=a[y].back();
a[y].pop_back();
break;
}
st.pb(y);
}
else
{
printf("%d ", st.back());
st.pop_back();
}
}
return 0;
}