Pagini recente » Monitorul de evaluare | Borderou de evaluare (job #2751036) | Cod sursa (job #189549) | Cod sursa (job #546498) | Cod sursa (job #2331821)
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n, m, i, j, x, y, vecin, nod, k, s[500100], d[100100], f[500100];
vector< pair<int,int> >a[100100];
int main(){
fin>>n>>m;
for(i=1; i<=m; i++){
fin>>x>>y;
a[x].push_back(make_pair(y, i));
a[y].push_back(make_pair(x, i));
d[x]++;
d[y]++;
}
for(i=1; i<=n; i++){
if(d[i]%2==1){
fout<<-1;
return 0;
}
}
k=1;
s[1]=1;
while(k!=0){
nod=s[k];
if(d[nod]==0){
if(k>1){
fout<<nod<<" ";
}
k--;
continue;
}else{
while(f[a[nod].back().second]==1){
a[nod].pop_back();
}
vecin=a[nod].back().first;
d[nod]--;
d[vecin]--;
f[a[nod].back().second]=1;
a[nod].pop_back();
k++;
s[k]=vecin;
}
}
}