Pagini recente » Cod sursa (job #1841572) | Cod sursa (job #2407856) | Cod sursa (job #2074081) | Cod sursa (job #2750053) | Cod sursa (job #2374736)
#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;
int grad[MAXN];
FILE*fout;
void dfs(int nod){
int st, dr, i;
stiv.push_back(nod);
while(!stiv.empty()){
// printf("%d\n", nod);
if(!stiv.empty() && grad[stiv.back()]==0){
fprintf(fout, "%d ", stiv.back());
stiv.pop_back();
}
if(!stiv.empty()){
nod=stiv.back();
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;
grad[nod]--;
grad[g[nod][i].dest]--;
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++){
grad[i]=g[i].size();
if(g[i].size()%2==1)
ok=0;
}
if(ok==0)
fprintf(fout, "-1");
else
dfs(1);
return 0;
}