Pagini recente » Cod sursa (job #1241224) | Cod sursa (job #2545451) | Cod sursa (job #562781) | Cod sursa (job #2880810) | Cod sursa (job #2958290)
#include<iostream>
#include<deque>
#include<algorithm>
#include<vector>
#include<fstream>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
struct edge{
int a,b;
bool visited;
};
int n,m;
vector<vector<int>> g;
vector<edge> edges;
vector<int> result;
void read(){
in>>n>>m;
g.resize(n+1);
edges.resize(m);
int a,b;
for(int i=0;i<m;i++){
in>>a>>b;
edges[i] = {a,b,false};
g[a].push_back(i);
g[b].push_back(i);
}
}
void euler(int node){
for(int k:g[node]){
if(edges[k].visited){
continue;
}
edges[k].visited = true;
int next = (node == edges[k].a) ? edges[k].b : edges[k].a;
euler(next);
}
result.push_back(node);
}
void solve(){
for(int i=1;i<=n;i++){
if(g[i].size()%2==1){
out<<-1;
return;
}
}
euler(1);
result.pop_back();
for(int k:result){
out<<k<<" ";
}
}
int main(){
read();
solve();
return 0;
}