Pagini recente » Cod sursa (job #2868371) | Cod sursa (job #2694167) | Cod sursa (job #121322) | Cod sursa (job #1118735) | Cod sursa (job #2712392)
#include <iostream>
#include <fstream>
#include <vector>
#include <array>
#include <stack>
#include <algorithm>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int NMAX = 1e5 + 1;
const int MMAX = 5e5 + 1;
bool sters[MMAX];
array<vector<int>, NMAX> lista;
int from[NMAX], to[NMAX];
int main()
{
int i, j, n, m, x, y;
fin>>n>>m;
for(i=0; i<m; i++)
{
fin>>x>>y;
lista[x].push_back(i);
lista[y].push_back(i);
from[i] = x;
to[i] = y;
}
auto e_impar = [](const vector<int>& v)
{
return (v.size()%2);
};
int nr_imp = count_if(lista.begin(), lista.end(), e_impar);
if(nr_imp != 0)
{
fout<<"-1\n";
fin.close();
fout.close();
return 0;
}
vector<int> rez;
stack<int> st;
int nod;
st.push(1);
while(!st.empty())
{
nod = st.top();
if(!lista[nod].empty())
{
int e = lista[nod].back();
lista[nod].pop_back();
if(!sters[e])
{
int dest = to[e] ^ from[e] ^ nod;
sters[e] = true;
st.push(dest);
}
}
else
{
rez.push_back(nod);
st.pop();
}
}
for(i=0; i<rez.size() - 1; i++)
{
fout<<rez[i]<<' ';
}
fin.close();
fout.close();
return 0;
}