Pagini recente » Cod sursa (job #1113477) | Cod sursa (job #3039295) | Cod sursa (job #505501) | Cod sursa (job #1742196) | Cod sursa (job #2967518)
#include<fstream>
#include<vector>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
vector<pair<int,int> > a[100001];
int nrmuchii,nrsol,dr;
int viz[500001],sol[100001],grad[100001],parcurs[100001];
int stiva[500001];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
a[x].push_back(make_pair(y,i));
a[y].push_back(make_pair(x,i));
grad[x]++;
grad[y]++;
}
dr=0;
for(int ii=1;ii<=n;ii++){
if(grad[ii]>0){
stiva[++dr]=ii;
break;
}
}
while(dr){
int nod=stiva[dr];
if(grad[nod]>0){
for(;parcurs[nod]<=a[nod].size();parcurs[nod]++){
if(!viz[a[nod][parcurs[nod]].second]){
viz[a[nod][parcurs[nod]].second]=1;
grad[nod]--;
grad[a[nod][parcurs[nod]].first]--;
stiva[++dr]=a[nod][parcurs[nod]].first;
break;
}
}
}
else{
sol[++nrsol]=stiva[dr];
dr--;
}
}
if(nrsol==m+1){
for(int i=1;i<nrsol;i++)
cout<<sol[i]<<" ";
}
else
cout<<-1;
}