Pagini recente » Cod sursa (job #2759876) | Cod sursa (job #1009267) | Cod sursa (job #1314824) | Cod sursa (job #255263) | Cod sursa (job #2907703)
#include <fstream>
#include <stack>
#include <vector>
#define nMax 100024
using namespace std;
int n, grades[nMax], viz[nMax];
vector <pair<int,int>> graph[nMax];
vector <int> sol;
void read() {
int i,m,x,y;
scanf("%d%d",&n,&m);
for(i=0;i<m;++i) {
scanf("%d%d",&x,&y);
graph[x].emplace_back(y,i);
graph[y].emplace_back(x,i);
++grades[x];
++grades[y];
}
}
bool isEulerian() {
int i;
for(i=0;i<n;++i) {
if(grades[i]%2) {
return false;
}
}
return true;
}
void solve() {
int node;
stack <int> s;
for(s.push(1); !s.empty();) {
node = s.top();
if(!graph[node].empty()) {
auto edg = graph[node].back();
graph[node].pop_back();
if(!viz[edg.second]) {
++viz[edg.second];
s.push(edg.first);
}
}
else {
sol.push_back(node);
s.pop();
}
}
}
bool isNotConnex() {
int i;
for(i=0;i<n;++i) {
if(!viz[i]) {
return false;
}
}
return true;
}
void display() {
if(isNotConnex()) {
printf("-1");
return;
}
for(int i = 1; i < sol.size(); ++i) {
printf("%d ",sol[i]);
}
}
int main() {
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
read();
if(isEulerian()) {
solve();
display();
}
else {
printf("-1");
}
return 0;
}