Pagini recente » Cod sursa (job #1550893) | Cod sursa (job #2250461) | Cod sursa (job #2730224) | Istoria paginii runda/creanga10-12 | Cod sursa (job #1812083)
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
const int nmax=100005;
const int mmax=500005;
vector<int> v[nmax];
int a[mmax],b[mmax],G[nmax],ans[mmax],st[nmax];
bool used[nmax];
int node,i,n,m,x,y,u,rasp;
int main()
{
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
a[i]=x;
b[i]=y;
v[x].push_back(i);
v[y].push_back(i);
}
for(i=1;i<=n;i++)
{
if(v[i].size()%2) {g<<"-1";return 0;}
G[i]=v[i].size()-1;
}
u++;st[u]=1;
while(u>0)
{
node=st[u];
if(G[node]!=-1)
{
i=G[node];
if(!used[v[node][i]])
{
u++;
st[u]=(node xor a[v[node][i]] xor b[v[node][i]]);
used[v[node][i]]=1;
}
G[node]--;
}else
{
u--;
rasp++;
ans[rasp]=node;
}
}
if(rasp<=m) {g<<"-1";return 0;}
for(i=1;i<rasp;i++)
g<<ans[i]<<' ';
return 0;
}