Pagini recente » Cod sursa (job #3182014) | Cod sursa (job #2699880) | Cod sursa (job #2252286) | Cod sursa (job #2659072) | Cod sursa (job #2371111)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int nmax=100005;
const int mmax=500005;
vector<int> v[nmax];
int unu[mmax],doi[mmax],ans[mmax],st[mmax],used[mmax];
int G[nmax];
int n,m,i,a,b,u,x,edg,nr;
int main()
{
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>a>>b;
v[a].push_back(i);
v[b].push_back(i);
unu[i]=a,doi[i]=b;
}
for(i=1;i<=n;i++)
{
G[i]=v[i].size();
if((G[i]&1))
{
g<<"-1";
return 0;
}
}
st[u=1]=1;
while(u)
{
x=st[u];
if(G[x])
{
G[x]--;edg=v[x][G[x]];
if(!used[edg])
{
st[++u]=(unu[edg]^doi[edg]^x);
used[edg]=1;
}
}
else
{
u--;
ans[++nr]=x;
}
}
if(nr!=m+1)
{
g<<"-1";
return 0;
}
for(i=1;i<nr;i++)
g<<ans[i]<<' ';
return 0;
}