Pagini recente » Cod sursa (job #1383927) | Cod sursa (job #1031954) | Cod sursa (job #2110185) | Cod sursa (job #227781) | Cod sursa (job #2374244)
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100001
#define MAXM 500001
struct edge {
int dest;
int ord;
};
bool f[MAXM];
vector<edge>g[MAXN];
vector<int>stiv;
bool verif(int nod){
int i;
int ok=0;
for(i=0; i<g[nod].size(); i++)
if(f[g[nod][i].ord]==0)
ok=1;
return ok;
}
FILE*fout;
void dfs(int nod){
int st, dr, i;
stiv.push_back(nod);
while(!stiv.empty()){
nod=stiv.back();
if(verif(nod)==0){
fprintf(fout, "%d ", nod);
stiv.pop_back();
}
else{
int ok=1;
for(i=0; i<g[nod].size() && ok==1; i++){
// printf("%d %d %d %d\n", nod, g[nod][i].dest, g[nod][i].ord, f[g[nod][i].ord]);
if(f[g[nod][i].ord]==0){
ok=0;
f[g[nod][i].ord]=1;
stiv.push_back(g[nod][i].dest);
}
}
}
}
}
int main(){
FILE*fin=fopen("ciclueuler.in", "r");
fout=fopen("ciclueuler.out", "w");
int n, m, i, a, b;
fscanf(fin, "%d%d", &n, &m);
for(i=1; i<=m; i++){
f[i]=0;
fscanf(fin, "%d%d", &a, &b);
g[a].push_back({b, i});
g[b].push_back({a, i});
}
int ok=1;
for(i=1; i<=n; i++)
if(g[i].size()%2==1)
ok=0;
if(ok==0)
fprintf(fout, "-1");
else
dfs(1);
return 0;
}