Pagini recente » Profil Rodik_Rody | Cod sursa (job #1330176) | Cod sursa (job #1166564) | Cod sursa (job #2014758) | Cod sursa (job #2846674)
#include <bits/stdc++.h>
#define Mmax 500005
#define Nmax 100005
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
struct three{
int first,second;
bool third;
};
three M[Mmax];
vector<int>G[Nmax],sol;
int n,m;
bool Verif()
{
for(int i = 1; i <= n; i++)
if(G[i].size() & 1)
return 0;
return 1;
}
void Euler(int nod)
{
for(vector<int>::iterator it = G[nod].begin(); it < G[nod].end(); it++)
{
int muchie = *it;
if(!M[muchie].third)
{
M[muchie].third = true;
if(M[muchie].first == nod)
Euler(M[muchie].second);
else
Euler(M[muchie].first);
}
}
sol.push_back(nod);
}
int main()
{
f>>n>>m;
for(int i = 1; i <= m; i++)
{
int x,y;
f>>x>>y;
M[i]={x,y,false};
G[x].push_back(i);
G[y].push_back(i);
}
if(!Verif())
{
cout<<"-1\n";
return 0;
}
Euler(1);
g<<sol.size()-1<<"\n";
for(vector<int>::reverse_iterator it = sol.rbegin(); it < sol.rend()-1; it++)
g<<*it<<" ";
return 0;
}