Pagini recente » Cod sursa (job #2374282) | Cod sursa (job #1756658) | Cod sursa (job #1699479) | Cod sursa (job #2652255) | Cod sursa (job #1814089)
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#include <bitset>
#define NMAX 100001
#define MMAX 500005
using namespace std;
int n, m, x, y, ok = 1;
vector<int> v[NMAX];
stack<int> S;
vector<pair<int, int> > M;
bitset<MMAX> viz;
void euler()
{
S.push(1);
while(!S.empty())
{
int nod = S.top();
if(!v[nod].empty())
{
int mi = v[nod].back();
v[nod].pop_back();
if(!viz[mi])
{
int w = 0;
if(nod == M[mi].first)
w = M[mi].second;
else if(nod == M[mi].second)
w = M[mi].first;
viz[mi] = 1;
S.push(w);
}
} else {
printf("%d ", nod);
S.pop();
}
}
}
int main()
{
freopen( "ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
scanf("%d %d\n", &n, &m);
for(int i = 0; i < m; i++)
{
scanf("%d %d\n", &x, &y);
M.push_back(make_pair(x, y));
v[x].push_back(M.size() - 1);
v[y].push_back(M.size() - 1);
}
for(int i = 1; i <= n; i++)
if(v[i].size() % 2 == 1)
{
printf("-1");
ok = 0;
break;
}
if(ok)
euler();
return 0;
}