Pagini recente » Cod sursa (job #844938) | Cod sursa (job #321005) | Cod sursa (job #3207600) | Cod sursa (job #1884162) | Cod sursa (job #2950406)
#include <fstream>
#include <vector>
#include <bitset>
#include <unordered_map>
#include <set>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
struct Info {
int node1;
int edgeId;
};
int n,m;
vector<vector<Info>> graph;
vector<int> nodeGradImpar;
vector<bitset<1>> vis;
vector<int> path;
void read() {
cin>>n>>m;
graph.resize(n+1);
int a,b;
for(int i=1;i<=m;i++) {
cin>>a>>b;
graph[a].push_back({b,i});
graph[b].push_back({a,i});
}
}
void tractoreala(int node) {
while(!graph[node].empty() && vis[graph[node].back().edgeId]==1) {
graph[node].pop_back();
}
}
void dfs(int node) {
path.push_back(node);
while(!graph[node].empty()) {
tractoreala(node);
if(graph[node].empty()) {
return;
}
vis[graph[node].back().edgeId]=1;
dfs(graph[node].back().node1);
}
}
void solve() {
int cntGradImpar=0;
for(int i=1;i<=n;i++) {
if(graph[i].size()%2==1) {
cntGradImpar++;
}
}
if(cntGradImpar>0) {
cout<<"-1\n";
return;
}
vis.resize(m+1);
vis[1]=1;
dfs(1);
for(auto it:path) {
cout<<it<<" ";
}
}
int main() {
read();
solve();
return 0;
}