Pagini recente » Cod sursa (job #1587509) | Cod sursa (job #1010322) | Cod sursa (job #1296562) | Cod sursa (job #3129139) | Cod sursa (job #1757904)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;
const int nmx = 100002;
int n,m;
int grad[nmx];
vector <int> g[nmx];
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[nod2];
++grad[nod1];
}
}
bool imparitate()
{
for(int i = 1; i <= n; ++i)
if(grad[i] % 2)
return true;
return false;
}
void rezolvare()
{
st.push(1);
while(not st.empty())
{
int nod = st.top();
if(g[nod].size())
{
int nod1 = g[nod].back();
st.push(nod1);
g[nod].pop_back();
g[nod1].erase(find(g[nod1].begin(),g[nod1].end(),nod));
}
else
{
st.pop();
printf("%d ", nod);
}
}
}
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
citire();
if(imparitate())
{
printf("-1\n");
return 0;
}
rezolvare();
return 0;
}