Pagini recente » Cod sursa (job #1097402) | Cod sursa (job #2297283) | Cod sursa (job #414475) | Cod sursa (job #1389449) | Cod sursa (job #751814)
Cod sursa(job #751814)
#include<cstdio>
#include<set>
using std::multiset;
multiset<int> v[100005];
bool d[100005];
bool p[100005];
bool isfirst=true;
void euler (int x)
{
bool first=isfirst;
isfirst=false;
while(!v[x].empty()){
int w=*v[x].begin();
//if(x!=w)
v[w].erase (v[w].find (x));
v[x].erase (v[x].begin());
euler (w);
}
if(!first)
printf ("%d ",x);
}
void dfs (int x)
{
p[x]=1;
for(multiset<int>::iterator it=v[x].begin();it!=v[x].end();it++)
if(!p[*it])
dfs (*it);
}
int main()
{
freopen ("ciclueuler.in","r",stdin);
freopen ("ciclueuler.out","w",stdout);
int n,m;
scanf ("%d%d",&n,&m);
while(m--){
int x,y;
scanf ("%d%d",&x,&y);
v[x].insert (y);
v[y].insert (x);
d[x]^=1;
d[y]^=1;
}
dfs (1);
for(int i=1;i<=n;i++)
if(d[i]||!p[i]){
puts ("-1");
return 0;
}
euler (1);
return 0;
}