Pagini recente » Cod sursa (job #1563935) | Cod sursa (job #644348) | Cod sursa (job #515706) | Cod sursa (job #729584) | Cod sursa (job #2663773)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <queue>
#define MAXN 100001
#define MAXM 500001
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m;
struct nod{
int dest;
nod *urm;
};
nod *MC[MAXM];
void add(int x,int y){
if(MC[x]==NULL){
MC[x]=new nod;
MC[x]->dest=y;
MC[x]->urm=NULL;
}
else{
nod *q=new nod;
q->dest=y;
q->urm=MC[x];
MC[x]=q;
}
}
void close(int x,int y){
nod *i=new nod;
if(MC[x]->dest==y){
MC[x]=MC[x]->urm;
return;
}
i=MC[x];
for(;i->urm!=NULL;i=i->urm){
if(i->urm->dest==y){
i->urm=i->urm->urm;
return;
}
}
if(i->dest==y)
i=NULL;
}
void afis(){
for(int i=1;i<=n;i++){
nod *j=new nod;
for(j=MC[i];j!=NULL;j=j->urm){
fout<<i<<' '<<j->dest<<'\n';
}
fout<<"*\n";
}
}
queue <int> myq;
stack <int> myst;
int grad[MAXN],nrgoodgrad;
int main(){
fin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
fin>>x>>y;
grad[x]++;
if(grad[x]%2==0) nrgoodgrad++;
else nrgoodgrad--;
grad[y]++;
if(grad[y]%2==0) nrgoodgrad++;
else nrgoodgrad--;
add(x,y); add(y,x);
}
if(nrgoodgrad!=0){
fout<<-1;
return 0;
}
myst.push(1);
while(!myst.empty()){
int nod=myst.top();
if(MC[nod]!=NULL){
myst.push(MC[nod]->dest);
close(MC[nod]->dest,nod);
MC[nod]=MC[nod]->urm;
}
else{
myst.pop();
myq.push(nod);
}
}
while(myq.size()>1){
fout<<myq.front()<<' ';
myq.pop();
}
return 0;
}