Pagini recente » Cod sursa (job #381217) | Cod sursa (job #841286) | Cod sursa (job #2638636) | Cod sursa (job #14268) | Cod sursa (job #2870641)
#include <bits/stdc++.h>
#define FOR(i, st, dr) for(i = st; i <= dr; i++)
#define pii pair<int,int>
//#define fin cin
//#define fout cout
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int NMAX = 1e5 + 5;
int n, m;
vector <bool> exist;
vector < pair <int, int> > muchie;
vector <int> g[NMAX];
vector <int> sol;
void citire()
{
fin >> n >> m;
int i;
for(i = 1; i <= m; ++i)
{
int a, b;
fin >> a >> b;
muchie.push_back({a, b});
exist.push_back(true);
g[a].push_back(muchie.size() - 1);
g[b].push_back(muchie.size() - 1);
}
}
bool check()
{
int i;
for(i = 1; i <= n; ++i)
if(g[i].size() % 2 == 1)
return false;
return true;
}
void fleury()
{
int top;
stack <int> stiva;
stiva.push(1);
while(!stiva.empty())
{
top = stiva.top();
if(g[top].size() == 0)
{
sol.push_back(top);
stiva.pop();
}
else
{
int ax = g[top].back();
g[top].pop_back();
if(exist[ax] == true)
{
exist[ax] = false;
ax = muchie[ax].first ^ muchie[ax].second ^ top;
stiva.push(ax);
}
}
}
}
void afis()
{
int i;
for(i = 0; i + 1 < sol.size(); ++i)
fout << sol[i] << ' ';
}
int main()
{
citire();
if(check() == false)
{
fout << "-1";
exit(0);
}
fleury();
afis();
return 0;
}