Pagini recente » Cod sursa (job #518152) | Cod sursa (job #526321) | Cod sursa (job #1004616) | Cod sursa (job #1727854) | Cod sursa (job #3002270)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int N, M;
bool utilizat[500001];
int plec[500001], dest[500001];
vector<int> adi[100001];
stack<int> s;
vector<int> rez;
int main() {
fin >> N >> M;
for(int i = 1; i <= M; i++) {
fin >> plec[i] >> dest[i];
adi[plec[i]].push_back(i);
adi[dest[i]].push_back(i);
}
for(int i = 1; i <= N; i++) {
if((adi[i].size() & 1) != 0) {
fout << "-1";
return 0;
}
}
//incepem cu nodul 1
s.push(1);
while(!s.empty()) {
int crt = s.top();
if(!adi[crt].empty()) {
int muchie = adi[crt].back();
adi[crt].pop_back();
if(!utilizat[muchie]) {
utilizat[muchie] = true;
s.push((dest[muchie] == crt) ? plec[muchie] : dest[muchie]);
}
}
else {
rez.push_back(crt);
s.pop();
}
}
for(auto it : rez) {
fout << it << " ";
}
return 0;
}