Pagini recente » Cod sursa (job #2055465) | Cod sursa (job #942473) | Cod sursa (job #1912334) | Cod sursa (job #598867) | Cod sursa (job #1581955)
#include<fstream>
#include<vector>
#include<stack>
using namespace std;
int n, m, i, j, nod, vecin, x, y, ok;
int d[100005], viz[100005], f[500005];
vector< pair<int, int > > v[100005];
stack<int> s;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
void dfs(int nod){
viz[nod] = 1;
for(int i = 0; i < v[nod].size(); i++){
int vecin = v[nod][i].first;
if(viz[vecin] == 0){
dfs(vecin);
}
}
}
int main(){
fin>> n >> m;
for(i = 1; i <= m; i++){
fin>> x >> y;
d[x]++;
d[y]++;
v[x].push_back( make_pair(y, i) );
v[y].push_back( make_pair(x, i) );
}
for(i = 1; i <= n; i++){
if(d[i] != 0){
x = i;
dfs(i);
break;
}
}
for(i = 1; i <= n; i++){
if(d[i] != 0){
if(viz[i] == 0 || d[i] % 2 == 1){
fout<<"-1\n";
return 0;
}
}
}
s.push(x);
while(!s.empty()){
nod = s.top();
if(d[nod] == 0){
if(ok == 0){
ok = 1;
}
else{
fout<< nod <<" ";
}
s.pop();
}
else{
i = v[nod].size() - 1;
while(f[ v[nod][i].second ] == 1){
v[nod].pop_back();
i--;
}
vecin = v[nod][i].first;
d[nod]--;
d[vecin]--;
f[ v[nod][i].second ] = 1;
v[nod].pop_back();
s.push(vecin);
}
}
return 0;
}