Pagini recente » Cod sursa (job #1835774) | Cod sursa (job #1185218) | Cod sursa (job #111177) | Cod sursa (job #1301160) | Cod sursa (job #1731577)
#include <cstdio>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
const int nmx = 100002;
int n,m,grad[nmx];
vector <int> g[nmx],ciclu;
stack <int> st;
void citire()
{
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; ++i)
{
int nod1,nod2;
scanf("%d %d", &nod1, &nod2);
g[nod1].push_back(nod2);
g[nod2].push_back(nod1);
++ grad[nod1];
++ grad[nod2];
}
}
bool grade_bune()
{
for(int i = 1; i <= n; ++i)
if(grad[i] % 2 == 1)
return 0;
return 1;
}
void elimin_muchie(int nod1, int nod2)
{
g[nod1].erase(find(g[nod1].begin(),g[nod1].end(),nod2));
g[nod2].erase(find(g[nod2].begin(),g[nod2].end(),nod1));
}
void euler()
{
st.push(1);
while(not st.empty())
{
int nod = st.top();
if(g[nod].size())
{
int nod_aux = g[nod].back();
elimin_muchie(nod,nod_aux);
st.push(nod_aux);
}
else
{
ciclu.push_back(nod);
st.pop();
}
}
}
void afish()
{
for(vector<int>::iterator it = ciclu.begin(); it != ciclu.end(); ++it)
printf("%d ", *it);
printf("\n");
}
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
citire();
if(not grade_bune())
printf("-1");
else
{
euler();
afish();
}
return 0;
}