Pagini recente » Cod sursa (job #2106982) | Cod sursa (job #1892751) | Cod sursa (job #401595) | Cod sursa (job #159031) | Cod sursa (job #3169547)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int st[1000001],gr[100001],n,m,x,y,nr,c[4000001],k;
struct numar
{
int x,y;
bool viz;
}v[500002];
vector <int> a[100005];
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y;
v[i].x=x,v[i].y=y;
a[x].push_back(i);
a[y].push_back(i);
gr[x]++;
gr[y]++;
}
for(int i=1;i<=n;i++)
{
if(gr[i]%2==1)
{
fout<<-1;
return 0;
}
}
st[++k]=1;
while(k>=1)
{
int nod = st[k];
int ok=0;
while(!a[nod].empty())
{
int muchie=a[nod].back();
a[nod].pop_back();
if(v[muchie].viz==0)
{
v[muchie].viz=1;
x=v[muchie].x;
y=v[muchie].y;
if(x!=nod)
st[++k]=x;
else
st[++k]=y;
ok=1;
break;
}
}
if(ok==0){
c[++nr]=nod;
k--;
}
}
if(nr!=m+1)
{
fout<<-1;
return 0;
}
for(int i=1;i<=nr;i++)
fout<<c[i]<<" ";
return 0;
}