Pagini recente » Monitorul de evaluare | Cod sursa (job #736470) | Cod sursa (job #451338) | Cod sursa (job #786035) | Cod sursa (job #3204839)
#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> N[100100];
int A[100100], R[100100], rs;
bool exista;
void parc(int nod){
rs++;
R[rs] = nod;
for(int i=0; i<N[nod].size(); i++){
int pana = N[nod][i];
if(pana && A[pana]-1){
m--;
A[nod]--;
A[pana]--;
int u = N[nod][i];
N[nod][i] = 0;
int j = 0;
while(N[u][j] != nod){
j++;
}
N[u][j] = 0;
parc(u);
} else if(pana == R[1]&& A[pana] == 1 && m == 1){
exista = 1;
}
}
return;
}
int main(){
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
cin >> n >> m;
int d, p;
for(int i=1; i<=m; i++){
cin >> d >> p;
N[d].push_back(p);
N[p].push_back(d);
A[d]++;
A[p]++;
}
parc(1);
if(exista){
for(int i=1; i<=rs; i++){
cout << R[i] << ' ';
}
} else {
cout << -1 << endl;
}
}