Pagini recente » Cod sursa (job #1428259) | Cod sursa (job #2793049) | Cod sursa (job #1768495) | Cod sursa (job #1128568) | Cod sursa (job #3213446)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,f[500001];
vector<int>G[100001];
pair<int,int>muchie[500001];
int rez[5000001],cnt=0,grad[100001];
int main(){
fin>>n>>m;
for(int i=1;i<=m;i++){
int x,y; fin>>x>>y;
muchie[i]={x,y};
G[x].push_back(i);
G[y].push_back(i);
grad[x]++;
grad[y]++;
}
for(int i=1;i<=n;i++)
if(grad[i]%2==1){
fout<<-1;
return 0;
}
stack<int>stiva;
stiva.push(1);
while(!stiva.empty()){
int nod = stiva.top();
int ok = 0;
while(G[nod].size()){
int it = G[nod].back();
G[nod].pop_back();
if(f[it]==1){
continue;
}
else{
f[it]=1;
//G[nod].pop_back();
int x = muchie[it].first;
int y = muchie[it].second;
if(y!=nod)
stiva.push(y);
else
stiva.push(x);
ok=1;
// stiva.push(y);
break;
}
}
if(ok==0){
rez[++cnt]=nod,stiva.pop();
}
}
// cout<<cnt<<'\n';
if(cnt!=m-1){
fout<<-1;
return 0;
}
for(int i=1;i<cnt;i++)
fout<<rez[i]<<" ";
return 0;
}