Pagini recente » Cod sursa (job #1397744) | Cod sursa (job #1300330) | Cod sursa (job #2261375) | Cod sursa (job #1859762) | Cod sursa (job #2716048)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct str{
int x,y;
};
const int nmax=100000, mmax=500000;
int t[nmax+1], m;
bool viz[nmax+1], mviz[mmax+1];
vector <str> g[nmax+1];
void ad(int nod){
viz[nod]=1;
for(int i=0;i<int(g[nod].size());i++){
int vecin=g[nod][i].x;
t[vecin]=g[nod][i].y;
if(viz[vecin]==0){
ad(vecin);
}
}
}
int k;
void euler(int nod){
k++;
if(k<=m){
fout<<nod<<" ";
}
for(int i=0;i<int(g[nod].size());i++){
int vecin=g[nod][i].x;
int muchie=g[nod][i].y;
if(mviz[muchie]==0){
if(t[nod]!=muchie&&t[vecin]!=muchie){
mviz[muchie]=1;
g[nod][i]=g[nod][g[nod].size()-1];
g[nod].pop_back();
euler(vecin);
}
}else{
g[nod][i]=g[nod][g[nod].size()-1];
g[nod].pop_back();
}
}
for(int i=0;i<int(g[nod].size());i++){
int vecin=g[nod][i].x;
int muchie=g[nod][i].y;
if(mviz[muchie]==0){
mviz[muchie]=1;
g[nod][i]=g[nod][g[nod].size()-1];
g[nod].pop_back();
euler(vecin);
}else{
g[nod][i]=g[nod][g[nod].size()-1];
g[nod].pop_back();
}
}
}
int main(){
int n;
fin>>n>>m;
for(int i=1;i<=m;i++){
str aux;
int x,y;
fin>>x>>y;
aux.x=y;
aux.y=i;
g[x].push_back(aux);
aux.x=x;
g[y].push_back(aux);
}
int ok=1;
ad(1);
for(int i=1;i<=n;i++){
if(viz[i]==0||g[i].size()%2==1){
ok=0;
}
}
if(ok==1){
euler(1);
fout<<"\n";
}else{
fout<<-1<<"\n";
}
}