Pagini recente » Cod sursa (job #2532899) | Cod sursa (job #2853280) | Cod sursa (job #2632882) | Cod sursa (job #2672816) | Cod sursa (job #1815708)
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
const int nmx = 100002;
struct Muchie
{
int nod1, nod2;
bool used = 1;
} v[nmx];
int n,m,grd[nmx];
vector <int> g[nmx];
stack <int> st;
void citire()
{
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; ++i)
{
scanf("%d %d", &v[i].nod1, &v[i].nod2);
g[v[i].nod1].push_back(i);
g[v[i].nod2].push_back(i);
grd[v[i].nod1] ++;
grd[v[i].nod2] ++;
}
}
bool grade_bune()
{
for(int i = 1; i <= n; ++i)
if(grd[i] % 2)
return 0;
return 1;
}
void euler()
{
st.push(1);
while(not st.empty())
{
int nod = st.top();
if(g[nod].size())
{
int mhc = g[nod].back();
g[nod].pop_back();
if(v[mhc].used == 1)
{
if(v[mhc].nod1 != nod)
st.push(v[mhc].nod1);
else
st.push(v[mhc].nod2);
v[mhc].used = 0;
}
}
else
{
printf("%d ", nod);
st.pop();
}
}
}
int main()
{
freopen("eulerian.in", "r", stdin);
freopen("eulerian.out", "w", stdout);
citire();
if(not grade_bune())
{
printf("-1\n");
return 0;
}
euler();
return 0;
}