Pagini recente » Cod sursa (job #2165020) | Cod sursa (job #616279) | Cod sursa (job #1863219) | Cod sursa (job #592882) | Cod sursa (job #2849620)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct Muchie {
int x, y;
bool used;
};
vector <vector <int>> G;
vector <Muchie> M;
vector <int> ans;
int n, m;
void Input() {
fin >> n >> m;
G.resize(n + 1);
for(int i = 0; i < m; i ++) {
int x, y;
fin >> x >> y;
M.push_back({x, y, false});
G[x].push_back(i);
G[y].push_back(i);
}
}
bool GradePare() {
for(auto x : G)
if(x.size() % 2) return false;
return true;
}
void CicluEulerian() {
stack <int> S;
S.push(1);
while(!S.empty()) {
int curr = S.top();
if(G[curr].empty()) {
ans.push_back(curr);
S.pop();
} else {
int last = G[curr].back();
G[curr].pop_back();
if(!M[last].used) {
M[last].used = true;
if(M[last].x == curr) S.push(M[last].y);
else S.push(M[last].x);
}
}
}
}
void Output() {
if(ans.size() - 1 != m) {
fout << "-1\n";
return;
}
ans.pop_back();
for(auto x : ans) fout << x << ' ';
fout << '\n';
}
int main() {
Input();
if(!GradePare()) {
fout << "-1\n";
return 0;
}
CicluEulerian();
Output();
return 0;
}