Pagini recente » Cod sursa (job #2589709) | Cod sursa (job #2616493) | Cod sursa (job #399625) | Cod sursa (job #433822) | Cod sursa (job #2502218)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m;
vector<vector<int>> a(100001,vector<int>());
struct Muchie{
int x;
int y;
} muchii[500001];
bool eliminat[500001];
vector<int> solutie;
void Citire()
{
int x,y;
f>>n>>m;
for(int i=1;i<=m;++i)
{
f>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
muchii[i] = {x,y};
}
f.close();
}
bool Verificare()
{
for(int i=1;i<=n;++i)
if(a[i].size() % 2 == 1) return false;
return true;
}
void Determinare()
{
vector<int> v;
v.push_back(1);
while (!v.empty())
{
int nod = v.back();
if (!a[nod].empty())
{
int ind = a[nod].back();
a[nod].pop_back();
if (!eliminat[ind])
{
eliminat[ind] = 1;
int to;
if (muchii[ind].x == nod) to = muchii[ind].y;
else to = muchii[ind].x;
v.push_back(to);
}
}
else
{
v.pop_back();
solutie.push_back(nod);
}
}
for(vector<int>::iterator it=solutie.begin();it!=solutie.end();++it)
g<<*it<<" ";
g.close();
}
int main()
{
Citire();
if(!Verificare())
{
g<<-1;
return 0;
}
Determinare();
return 0;
}