Pagini recente » Borderou de evaluare (job #2579038) | Borderou de evaluare (job #1619715) | Borderou de evaluare (job #2649425) | Borderou de evaluare (job #3308813) | Cod sursa (job #3313655)
#include <fstream>
#include <vector>
using namespace std;
const int NMAX = 2e5;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
pair <int, int> edge[NMAX + 2];
vector <vector <pair <int, int>>>v; ///first = nod, second = id
bool viz[NMAX + 2]; ///muchiile
vector <int> ans;
void dfs(int start) {
for(auto x : v[start]) {
if(!viz[x.second]) {
viz[x.second] = 1;
dfs(x.first);
}
}
ans.push_back(start);
}
int main() {
int n, m;
cin >> n >> m;
v.resize(n + 1);
for(int i = 1; i <= m; i++) {
cin >> edge[i].first >> edge[i].second;
v[edge[i].first].push_back({edge[i].second, i});
v[edge[i].second].push_back({edge[i].first, i});
}
for(int i = 1; i <= n; i++) {
if(v[i].size() % 2) {
cout << "-1";
return 0;
}
}
dfs(1);
ans.pop_back();
for(auto x : ans)
cout << x << " ";
return 0;
}