Pagini recente » Cod sursa (job #1160345) | Cod sursa (job #1478065) | Cod sursa (job #1293177) | Cod sursa (job #74122) | Cod sursa (job #2084973)
#include <bits/stdc++.h>
#define MN 100005
#define MM 500005
#define x first
#define y second
#define pii pair <int, int>
#define pb push_back
#define mp make_pair
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
typedef unsigned int ui;
int N, M, deg[MN];
bitset <MN> vizN;
bitset <MM> vizM;
vector <pii> V[MM];
stack <int> S;
vector <int> C;
void dfs(int nod)
{
vizN.set(nod);
for(ui i = 0; i < V[nod].size(); ++i)
if(!vizN.test(V[nod][i].x))
dfs(V[nod][i].x);
}
int main()
{
in >> N >> M;
for(int a, b, i = 1; i <= M; ++i)
{
in >> a >> b;
V[a].pb(mp(b, i)); deg[a]++;
V[b].pb(mp(a, i)); deg[b]++;
}
dfs(1);
for(int i = 1; i <= N; ++i)
if(!vizN.test(i) || deg[i]&1)
{
out << -1 << '\n';
return 0;
}
S.push(1);
while(!S.empty())
{
int nod = S.top();
if(!deg[nod])
{
C.push_back(nod);
S.pop();
}
else
{
while(vizM.test(V[nod].back().y) && !V[nod].empty()) V[nod].pop_back();
int next = V[nod].back().x;
deg[nod]--, deg[next]--;
vizM.set(V[nod].back().y);
V[nod].pop_back();
S.push(next);
}
}
for(ui i = 0; i < C.size()-1; ++i)
out << C[i] << ' ';
in.close(), out.close();
return 0;
}