Pagini recente » Cod sursa (job #2681007) | Monitorul de evaluare | Cod sursa (job #1565140) | Rating Damian alexandru (Skelletro) | Cod sursa (job #1937714)
#include <bits/stdc++.h>
#define MAXN 100000
#define MAXM 500000
std::vector < std::pair <int,int> > G[MAXN+1];
bool viz[MAXM+1];
int stiv[MAXM+1];
int sol[MAXM+1];
int main(){
FILE*fi,*fout;
int i,n,m,nod,a,b,ist,sz;
fi=fopen("ciclueuler.in" ,"r");
fout=fopen("ciclueuler.out" ,"w");
fscanf(fi,"%d %d " ,&n,&m);
for(i=1;i<=m;i++){
fscanf(fi,"%d %d " ,&a,&b);
G[a].push_back(std::make_pair(b,i));
G[b].push_back(std::make_pair(a,i));
}
i=1;
while(i<=n&&G[i].size()%2==0)
i++;
if(i<=n)
fprintf(fout,"-1");
else{
ist=0;
stiv[ist]=1;
sz=m;
while(ist>=0){
int nod=stiv[ist];
while(G[nod].size()&&viz[G[nod].back().second])
G[nod].pop_back();
if(G[nod].size()==0){
ist--;
sol[sz--]=nod;
}
else{
stiv[ist+1]=G[nod].back().first;
viz[G[nod].back().second]=1;
G[nod].pop_back();
ist++;
}
}
for(i=0;i<=m;i++)
fprintf(fout,"%d " ,sol[i]);
}
fclose(fi);
fclose(fout);
return 0;
}