Pagini recente » Cod sursa (job #3285791) | Monitorul de evaluare | Cod sursa (job #3228545) | Cod sursa (job #3274080) | Cod sursa (job #3283079)
#include <bits/stdc++.h>
using namespace std;
#define INFILE "ciclueuler.in"
#define OUTFILE "ciclueuler.out"
class Edge {
public:
int node, index;
Edge(){}
Edge(int _node, int _index) : node(_node), index(_index) {}
};
const int N_MAX = 5e5;
int nodes, edges;
bool visited[N_MAX + 1];
vector<Edge> adj[N_MAX + 1];
vector<int> ans;
void dfs(int node){
while(!adj[node].empty()){
auto to = adj[node].back();
adj[node].pop_back();
if(!visited[to.index]){
visited[to.index] = true;
dfs(to.node);
}
}
ans.push_back(node);
}
void solve(){
cin >> nodes >> edges;
for(int i = 0; i < edges; ++i){
int node1, node2; cin >> node1 >> node2;
adj[node1].push_back(Edge(node2, i));
adj[node2].push_back(Edge(node1, i));
}
for(int i = 1; i <= nodes; ++i){
if(adj[i].size() % 2 == 1) {
cout << -1 << '\n';
return;
}
}
dfs(1);
ans.pop_back();
for(auto &it : ans){
cout << it << " ";
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
freopen(INFILE, "r", stdin);
freopen(OUTFILE, "w", stdout);
solve();
return 0;
}