Pagini recente » Cod sursa (job #2117778) | Cod sursa (job #2085360) | Cod sursa (job #431991) | Cod sursa (job #1630522) | Cod sursa (job #671959)
Cod sursa(job #671959)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int N = 100010;
int n,mm,gr[N],m[N];
vector<pair<int,int> > g[N];
void euler(int nod) {
int i,t=g[nod][g[nod].size() - 1].first;
if(g[nod].size()==0)
return;
out << t << " ";
while(m[t]>1) {
out << t << " ";
--m[t];
}
g[nod].erase(g[nod].begin() + g[nod].size() - 1);
for(i=0;i!=g[t].size();++i)
if(g[t][i].first==nod) {
g[t].erase(g[t].begin() + i);
break;
}
euler(t);
}
int main() {
int i,a,b;
in >> n >> mm;
for(i=1;i<=mm;++i) {
in >> a >> b;
if(a==b) {
m[a]++;
m[b]++;
continue;
}
g[a].push_back(pair<int,int>(b,i));
g[b].push_back(pair<int,int>(a,i));
++gr[a]; ++gr[b];
}
for(i=1;i<=mm;++i)
if(gr[i]&1) {
out << "-1";
return 0;
}
out << "1 ";
while(m[1]--)
out << "1 ";
euler(1);
return 0;
}