Pagini recente » Cod sursa (job #1020156) | Istoria paginii runda/usu12 | testare_chiur | Cod sursa (job #2274736) | Cod sursa (job #1191366)
#include <cstdio>
#include <vector>
#define N 100010
#define M 200010
using namespace std;
vector< int >v[N];
int n,m,i,a[M],b[M],gr[N],viz[N];
void df(int),go(int);
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&a[i],&b[i]);
v[a[i]].push_back(i);
v[b[i]].push_back(i);
gr[a[i]]++;gr[b[i]]++;
}
for(i=1;i<=n;i++)
if(gr[i]&1)
{
printf("-1\n");
return 0;
}
df(1);
for(i=1;i<=n;i++)
if(!viz[i])
{
printf("-1\n");
return 0;
}
go(1);
return 0;
}
void df(int nod)
{
viz[nod]=1;
for(vector<int>::iterator it=v[nod].begin();it!=v[nod].end();it++)
{
if(viz[a[*it]+b[*it]-nod])continue;
else
{
int aux=v[nod].front();
v[nod][0]=*it;
*it=aux;
df(a[*it]+b[*it]-nod);
}
}
}
void go(int nod)
{
if(m){ printf("%d ",nod); m--; }
while(v[nod].size()&&!a[v[nod].back()])v[nod].pop_back();
if(v[nod].size())
{
int muchie=v[nod].back();
int vec=a[muchie]+b[muchie]-nod;a[muchie]=0;
v[nod].pop_back();
go(vec);
}
}