Pagini recente » Cod sursa (job #2343644) | Cod sursa (job #1447917) | Cod sursa (job #1341990) | Cod sursa (job #1145815) | Cod sursa (job #2570813)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <utility>
#include <cmath>
#include <string>
#include <cstring>
#define ll long long
using namespace std;
void euler(int node, vector<bool> &vis, vector<vector<pair<int, int>>> &g, vector<int> &ans) {
if(g[node].size()) {
auto to = g[node].back();
g[node].pop_back();
if(vis[to.second])
euler(node, vis, g, ans);
else {
vis[to.second] = 1;
euler(to.first, vis, g, ans);
euler(node, vis, g, ans);
}
} else {
ans.push_back(node);
}
}
int main() {
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int n, m;
in >> n >> m;
vector<vector<pair<int, int>>> g(n + 1);
for(int i = 1; i <= m; i ++) {
int x, y;
in >> x >> y;
g[x].push_back({y, i});
g[y].push_back({x, i});
}
for(int i = 1; i <= n; i ++) {
if(g[i].size() % 2) {
out << -1;
return 0;
}
}
vector<bool> vis(m + 1, 0);
vector<int> ans;
euler(1, vis, g, ans);
for(auto it : ans)
out << it << " ";
return 0;
}