Pagini recente » Monitorul de evaluare | Cod sursa (job #1716031) | Cod sursa (job #2676280) | Cod sursa (job #1910967) | Cod sursa (job #3313707)
#include <algorithm>
#include <iostream>
#include <fstream>
#include <climits>
#include <vector>
#include <stack>
#include <cmath>
#include <set>
// #include <bits/stdc++.h>
#define in fin
#define out fout
#define mkp make_pair
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
// lowkey nu am somn sooo in loc sa vegetez ma apuc de tema
vector<int> g[100001];
set< pair<int, int> > alr_bro; // puse deja
// 100% nu e cel mai eficient da mere
vector<int> finally;
void euler_died_for_this(int nod){
for(const int &x : g[nod]){
if(alr_bro.find(mkp( min(nod, x), max(nod, x) )) != alr_bro.end()) continue;
alr_bro.insert(mkp( min(nod, x), max(nod, x) ));
euler_died_for_this(x);
}
finally.push_back(nod);
}
signed main(){
ios_base::sync_with_stdio(false);
in.tie(NULL);
int n, m; in >> n >> m;
for(int i = 0; i < m; i++){
int x, y; in >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
bool pudak = 0;
for(int i = 1; i <= n; i++){
if(g[i].size() % 2 == 1) pudak = 1;
}
if(pudak) out << "-1\n";
else{
euler_died_for_this(1);
for(const int &x : finally) out << x << " ";
}
return 0;
}