Pagini recente » Cod sursa (job #2461550) | Cod sursa (job #40404) | Cod sursa (job #2221971) | Cod sursa (job #1372299) | Cod sursa (job #2376935)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int const maxim=100010;
vector <pair<int,int>> muchii[maxim];
vector <bool> vizitat;
vector <int> coada;
vector <int> raspuns;
int n,m;
void citire(){
in >> n >> m;
int a,b;
for(int i=1;i<=m;i++){
in >> a >> b;
muchii[a].push_back(make_pair(b,i));
muchii[b].push_back(make_pair(a,i));
vizitat.push_back(false);
}
}
void euler(int nodstart){
coada.push_back(nodstart);
while(!coada.empty()){
int nod=coada.back();
if(!muchii[nod].empty()){
int vecin=muchii[nod].back().first;
int numar=muchii[nod].back().second;
muchii[nod].pop_back();
if(vizitat[numar-1]==false){
vizitat[numar-1]=true;
coada.push_back(vecin);
}
}
else{
coada.pop_back();
raspuns.push_back(nod);
}
}
}
void afisare(){
for(size_t i=0;i<raspuns.size()-1;i++)out << raspuns[i] << " ";}
int main(){
citire();
for(int i=1;i<=n;i++){
if(muchii[i].size() & 1){
out << "-1";
return 0;
}
}
euler(1);
afisare();
return 0;}