Pagini recente » Cod sursa (job #2765261) | Cod sursa (job #3141776) | Cod sursa (job #2243489) | Cod sursa (job #2379302) | Cod sursa (job #1599618)
#include <bits/stdc++.h>
#define Nmax 500005
using namespace std;
vector<int> G[Nmax],sol;
stack<int> S;
bitset<Nmax> used;
int N,M;
int bad = 0;
void Read()
{
scanf("%d%d",&N,&M);
int a,b;
for(int i = 1; i <= M; ++i)
{
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
}
void DFS(int k)
{
used[k] = 1;
for(auto it : G[k])
if(!used[it])
DFS(it);
}
void Euler(int crt)
{
int next;
do{
/// while we have not finished a cycle, pick an edge, travel along it and delete it
while(G[crt].size()){
S.push(crt);
next = G[crt].back();
G[crt].pop_back();
G[next].erase(find(G[next].begin(),G[next].end(),crt));
crt = next;
}
crt = S.top();
sol.push_back(crt);
S.pop();
}while(!S.empty());
for(auto it : sol)
printf("%d ",it);
///printf("%d",sol[0]);
}
void Check()
{
for(int i = 1; i <= N; ++i)
if(G[i].size() % 2 == 1)
bad = 1;
DFS(1);
for(int i = 1; i <= N; ++i)
if(!used[i])
bad = 1;
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
Read();
Check();
if(bad)
printf("-1");
else
Euler(1);
return 0;
}